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

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

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

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

不少面试官会问你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!
横竖屏切换生命周期的执行app

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实例进入。ide

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

Q:Activity的启动流程
A:注意!这里并非要回答Activity的生命周期!
这里能够参考:app的启动
相似于app启动如何建立并进入MainActivity的。ui

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的操做,这样会减小以前崩溃所形成的后遗症!.net

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

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

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...

相关文章
相关标签/搜索