[Android] 面试题总结-猎趣-Android部分

前言

昨天(很久之前 = =),很意外的接到了猎趣的电话,直奔主题就开始面试了,我都不知道我投过这家公司,后来才知道,是朋友推荐的。面试官人很好,问的问题分了 Java,Android 两类,从简单到深入,一点一点来,事后,我觉得这是很难得的经历,打算记录下来,以备后用。

Android 问题

  • Activity 生命周期,以及简单分析一下,从 A 跳转到 B,在从 B(点击虚拟 Back 键)回到 A ,Activity A,B,分别执行了哪些方法?
  • 简要描述一下 Activity 的启动模式。
  • 你是怎么理解 Android 的 Android 异步消息处理机制,(如果基本回答出来了,会继续问你,对于 Looper 的理解,以及,MessageQueue 是什么时候创建的?)
  • 说一说,Window,Activity,View 三者的关系。
  • 说一下,你知道的几种常用动画类型,及其本质的区别。
  • 实现 View 的滑动,有哪几种方法?(如果你回答出了,ScrollTo(),和ScrollBy(),会问你这俩的区别,以及都继承自什么?)

下面我一个一个整理资料,为自己做一个总结。

1, Activity 生命周期

onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestroy();
还有一个 onRestart();这个基本没有什么问题,额外提一句 ** onNewIntent() ** 虽然不属于生命周期,但是有的公司面试,也会问到。
接下来是,Activity A,B,分别执行了哪些方法?顺序如下:

  • 启动 A : onCreate() —> onStart() —> onResume(), A 进入运行状态。
  • 跳转至 B :
    1. A 先执行:onPause()
    2. B 再执行:onCreate() -> onStart() -> onResume()
    3. A 再执行:onStop()
  • 从 B 返回 A:
    1. B 先执行:onPause()
    2. A 再执行:onRestart() -> onStart() -> onResume()
    3. B 再执行:onStop() -> onDestroy()
2,Activity 的 4 种启动模式

android:launchMode="standard | singleTop | singleTask | singleInstance"
先简单描述一下 Activity 任务栈:任务栈是一种后进先出的结构,每个 APP 默认只有一个栈,以APP的包名来命名。

  • standard : 标准模式,每次启动 Activity 都会创建一个新的实例,并且将其压入任务栈栈顶,不管这个 Activity 是否已经存在。每次 onCreate() -> onStart() -> onResume() 都会执行;
  • singleTop : 栈顶复用模式,跳转前,会先检查新的 Activity 是否已在栈顶,如果在,就不会创建新的实例,只会调用 onNewIntent() 方法;反之,如果不在栈顶, 则与 standard 模式一样;
  • singleTask:栈内复用模式,顾名思义,就是要保证栈内只有一个实例存在。跳转前,会先检查栈内是否已存在该实例,若存在,则会将其上方的所有实例清除掉,并调用 onNewIntent() 方法,使其出现在栈顶;
  • singleInstance :和 singleTask 很像,也有单例的作用,不同的是,会单独创建一个新的任务栈,归 singleInstance activity 独有。这种模式应用场景非常少,比如 “ 呼叫来电界面 ” 和 “ QQ 等第三方登录界面 ”。
3,异步消息处理机制

关于这个问题,我就不献丑了,我也是仔细阅读了 鸿洋 郭霖 大神的博客,才差不多懂了,双手奉上链接:

Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
Android异步消息处理机制完全解析,带你从源码的角度彻底理解

在此之前,我一直认为,Looper 就是一个 while(true) 的循环体,真是尴尬 = =!
在这里总结一下,防止自己又忘了:
Looper 内部有两个重要的方法:prepare() 和 loop();

  • prepare() :准备,就绪的意思,作用为,保证保证一个线程中只有一个 Looper 实例;
  • Looper():构造方法,创造了 MessageQueue(消息队列);
  • loop():不断从 MessageQueue 中去取消息,交给消息的 target 属性(即,Handler)的 dispatchMessage() 去处理。

另外,面试官还问我,子线程中能不能创建 Handler,一脸懵逼 = =

// 这是官方的标准写法
class LooperThread extends Thread {  
      public Handler mHandler;  
      public void run() {  
          Looper.prepare(); // 没有这句话,会报错。
  
          mHandler = new Handler() {  
              public void handleMessage(Message msg) {  
                  // process incoming messages here  
              }  
          };  
  
          Looper.loop();  
      }  
  }
4, Window,Activity,View

坦白说,这个是我从来没有研究过的问题,被问到时,第一反应是懵逼 = =,但是也不能直接说不知道,真尴尬,瞎扯了一会儿,然后面试官说,回答错了,我坦率地问了一句,“能否简单给我讲一下这个知识点吗?我真的很想知道!”,没想到面试官真的回答,我很惊讶,对这个公司的印象分,一下子上升了好大一截 ^ ^
时间过去了快2个礼拜,我只隐约记得,说:Window 是 容器;View 是视图,画布;而 Activity 可以看作是控制器,将 View 和 Window 关联在一起,这三者的关系有点像
MVC,你去读一读 setContentView() 的源码,就知道了。
不得不说,我阅读源码的能力,很是很弱的 = =,于是乎,我借鉴了以下文章:

理清Activity、View及Window之间关系
Activity、View、Window的理解

特别是后一篇,是我极偶然看到的(已经忘记是怎么搜到的了),大家有兴趣自己去看,我只简单总结一下:

  1. Window:一个 App 中有多个 Window,大小可自定义,作为盛放
    View 的容器;
  2. View:UI组件;
  3. Avtivity:关联 Window 和 View 的存在,用于控制 Window 下的 View-Tree;
  4. 不知道这个形容是否准确,但是容易理解和记忆吧 = =
    系统 <====> Window <====> Activity <====> View
    国家 <====> 房地产商 <====> 物业 <====> 居民
    ** 国家分配地皮给房地产商用以建造房屋,房地产商利用物业去管理居住在此的居民。 **
5,动画

关于这个,我只是会用而已,强烈建议,仔细阅读以下** 郭霖大神 **的文章,我陆陆续续看完了,也实践过,但是不经常用,就又忘记了 = =

Android属性动画完全解析(上),初识属性动画的基本用法
Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法

简单回答,面试问题:
三种:逐帧动画(frame-by-frame animation),补间动画(tweened animation),和属性动画(property animation)。
区别:补间动画,只是重新绘制了而已,其属性并未改变;属性动画,则是直接改变了其属性。

6,实现 View 滑动的几种方式(随手指滑动)

随手指滑动,基本都是用到 onTouchEvent() 这个我就不多说了,我知道的有以下几种方式:

  • layout(left, top, right, bottom)
  • offsetLeftAndRight(x)offsetTopAndBottom(y),其实就是对 layout 做了一层封装而已;
  • setLayoutParams(lp) 这个,在做 View 位置微调的时候用过;
  • scrollTo()scrollBy() 这个,稍微麻烦一点,我多说两句:
    • 顾名思义,To 就是移动到某个坐标点,By 不好直译,作用是,在原有位置在添加一个偏移量;
    • View.scrollTo() or View.scrollBy(),** 作用对象是,View 的内容 **,如 TextView 移动的是文字;
    • ViewGroup.scrollTo() or ViewGroup.scrollBy(),** 作用的对象是,所有子 View **;
  • 属性动画咯~ 个人感觉最好用,最容易~ 嘿嘿

** 以下是我所不知道的,连听都没听说过,真是孤陋寡闻啊 = = **

  • Scroller,通过 Scroller 类来实现一些平滑的动画效果,可以设置动画时间等;
  • ViewDragHelper,经典例子就是,侧滑菜单;

哦,忘记了说了,scrollTo()scrollBy() 分别继承自什么?面试官好坏,还挖坑 = =,“ 分别 ”,明明都继承自 View 类,哼~
再提一句,scrollBy() 内部调用了 scrollTo()

后记

这一篇拖得比较久,快两个礼拜了,真是抱歉,拖延症犯了 = =
主要原因了,我从西安去北京了~,原因是什么,大家应该猜到了,嘻嘻,没错,我收到 Offer 了,整体来说,全凭运气吧,我总觉得是因为,在面试过程中,我问面试官了一句,** “ 能否简单给我讲一下这个知识点吗?我真的很想知道!” **,多么红果果的求知欲,哈哈~
说实话,真的是运气使然,要感谢我的好基友,涛子~ 嘿嘿
明天就要正式去猎趣上班啦~ 跪求不要一日游~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,796评论 25 707
  • 哎呀呀 ,马上就要面临找工作了,媛媛心里紧张呀. 作为一个即将毕业的Android程序媛,开始面临找工作了,...
    仇诺伊阅读 4,544评论 7 59
  • 前几天整理了Java面试题集合,今天再来整理下Android相关的面试题集合.如果你希望能得到最新的消息,可以关注...
    Boyko阅读 3,625评论 8 135
  • 带着对魏巍太行的憧憬与向往,我们一行六人,在夏日清晨温柔的阳光下,在幽幽的蝉鸣声中,在孩子们欢乐的笑声里,...
    载驰阅读 268评论 0 0
  • 鉴于本人是房地产行业从业人士,正巧本月的读书主题又和房地产有关,借此就和大家分享一下本人的从业经历和对房地产市...
    Amyfather阅读 268评论 0 0