Android面试常客--四大组件之Activity

Activity是在面试过程中经常会被问到的四大组件之一,比如它的生命周期、启动模式等等,在这里将详细展开来讲解,不只是为了应付面试,在平时的开发过程中,掌握这些知识也是很重要的。

Q:Activity的生命周期?
A:相信很多人都在网上看过这么一张图片:


这里写图片描述
这里写图片描述

很多面试官会问你Activity的生命周期有哪些?
这个问题就很好回答了,照着这个图片依次说出来就好了。

Q:当dialog弹出来的时候,Activity执行了哪些生命周期的方法,当dialog消息的时候,又执行了哪些方法?
A:如果是单纯是创建的dialog,Activity并不会执行生命周期的方法,但是如果是跳转到一个不是全屏的Activity的话,当然就是按照正常的生命周期来执行了,即onPasue()->onStop()。

Q:设备横竖屏切换的时候,Activity的生命周期是如何变化的?
A:不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次;
设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次;
设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法;
tips:还有一点,非常重要,一个Android的变更细节!
当API >12时,需要加入screenSize属性,否则屏幕切换时即使你设置了orientation系统也会重建Activity!
横竖屏切换生命周期的执行

Q:Activity的启动模式有哪些?各有怎样的作用?
A:
Activity一共有四种launchMode:standard、singleTop、singleTask、singleInstance。
1.standard 模式是默认的启动模式,不用为配置android:launchMode属性即可。standard启动模式,不管有没有已存在的实例,都生成新的实例。
2.singleTop 我们在上面的基础上为指定属,android:launchMode="singleTop",系统就会按照singleTop启动模式处理跳转行为。跳转时系统会先在栈结构中寻找是否有一个Activity实例正位于栈顶,如果有则不再生成新的,而是直接使用。如果系统发现存在有Activity实例,但不是位于栈顶,重新生成一个实例。 这就是singleTop启动模式,如果发现有对应的Activity实例正位于栈顶,则重复利用,不再生成新的实例。
3.singleTask 如果发现有对应的Activity实例,则使此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象,显示到幕前。
4.singleInstance 这种启动模式比较特殊,因为它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。

Q:如何快速启动一个Activity?
A:这个问题其实也是比较简单的,就是不要在Activity的onCreate方法中执行过多繁重的操作,并且在onPasue方法中同样不能做过多的耗时操作。

Q:Activity的启动流程
A:注意!这里并不是要回答Activity的生命周期!
这里可以参考:app的启动
类似于app启动如何创建并进入MainActivity的。

Q:Activity异常退出该如何处理?
A:
Activity异常退出的时候 --> onPause() --> onSaveInstanceState() --> onStop() --> onDestory(),需要注意的是onSaveInstanceState() 方法与onPause并没有严格的先后关系,有可能在onPause之前,也有可能在其后面调用,但会在onStop()方法之前调用;
异常退出后又重新启动该Activity --> onCreate() --> onStart() --> onRestoreInstanceState() --> onResume();
搞懂这个生命周期的执行后就可以回答了,首先要知道面试官的意思,是要重新启动并恢复这个Activity还是说直接退出整个app,如果要恢复则要在onSaveInstanceState()中进行保存数据并在onRestoreInstanceState()中进行恢复,如果是要退出app的话就要捕获全局的异常信息,并退出app。
当然我建议是使用UncaughtExceotionHandler来捕获全局异常进行退出app的操作,这样会减少之前崩溃所造成的后遗症!

Q:Activity的onNewInstent()方法什么时候会执行?
A:这个是启动模式中的了,当此Activity的实例已经存在,并且此时的启动模式为SingleTask和SingleInstance,另外当这个实例位于栈顶且启动模式为SingleTop时也会触发onNewInstent()。

Q:锁定屏与解锁屏幕,Activity如何执行生命周期的?
A:只会调用onPause(),而不会调用onStop方法,开屏后则调用onResume()。

Q:如何修改 Activity 进入和退出动画?
A:
可 以 通 过 两 种 方 式 , 一 是 通 过 定 义 Activity 的 主 题 , 二 是 通 过 覆 写 Activity 的overridePendingTransition 方法。
通过设置主题样式在 styles.xml 中编辑如下代码:
添加 themes.xml 文件:
在 AndroidManifest.xml 中给指定的 Activity 指定 theme。
覆写 overridePendingTransition 方法:
overridePendingTransition(R.anim.fade, R.anim.hold);

Q:Activity间通过Intent传递数据大小有没有限制?
A:Intent在传递数据时是有大小限制的,这里官方并未详细说明,不过通过实验的方法可以测出数据应该被限制在1MB之内(1024KB),笔者采用的是传递Bitmap的方法,发现当图片大小超过1024(准确地说是1020左右)的时候,程序就会出现闪退、停止运行等异常(不同的手机反应不同),因此可以判断Intent的传输容量在1MB之内。

以上是个人的拙见,会不断更新!!

To Be Continued...

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

推荐阅读更多精彩内容