自己最近也要找工作所以整理一些面试问题, 方便自己学习也提供给大家
1. Activity 的启动过程
Activity 的启动过程有两种:
(1) 桌面 Luncher 点击图标启动一个应用, 对应会开启应用的主 Activity.
(2) 在 Activity 中通过 StartActivity 来启动新的 Activity.
点击图标启动, 因为 Launch 本身也是一个应用, 会调用 startActivitysately() 把启动信息 activity 相关的一些信息包括 action,category 等等保存在 intent 中, 会接着调用 startActivity----->startActivityForResult(). 在这个方法中通过监听程序与系统交互的一个类 Instrumentation 类来实现 Activity 的启动的. 在这个类中会调用 execStartActivity() 获得 ActivityManagerService 代理对象. 最后通过 Application 的 scheduleLaunchActivity. 到最终通过 ActivityThread 中的 performLaunchActivity() 来完成整个启动过程的,.
2.Activity 中的 Window 创建过程
我们知道 Activity 的启动过程最终会调用 ActivityThread 中的 performLaunchActivity(), 这个方法中会调用 Activity 的 attach 方法, 在这个方法中会创建一个 Activity 所属的 window 对象, 并且对他设置回调接口. 其过程就是在这个方法中调用 PolicyManager.makeNewWindow 来创建一个类型为 PhoneWindow 的应用窗口. 并且为他设置 Callback 接口, 只要有变化就会处理. 其中这个 PolicyManager.makeNewWindow 会调用 Policy 这个类的 makeNewWindow 来创建一个 PhoneWindow, 此方法中会创建一个 LayoutInflater 来创建窗口视图.
3.Activity 的启动模式
standard,singleTop,singTask,singleInstance
standard: 每次都创建新的 Activity.
singleTop: 如果栈顶有实例就复用, 如果不在栈顶就创建.
singleTask: 如果实例在栈顶就直接复用, 如果栈内有实例但不在栈顶, 移除实例上面 activity, 并且使此 activity 位于栈顶.
singleInstance: 每个实例都创建一个栈. 并且确保整个应用只有此 activity 的一个实例.
4.Activity 的生命周期顺序问题
一个 Activity 启动另一个 Activity 的时候
第一个 Activity onPause()--> 第二个 Activity onCreate()-->onStart()-->onResume() --> 第一个 Activity onStop()
当前 Activity 只有执行完 onPause(), 才会执行新 Activity 的 onResume().
当返回到第一个 Activity 时
第二个 Activity onPause() --> 第一个 Activity onRestart()-->onStart()-->onResume() --> 第二个 Activity onStop()-->onDestroy()
5.IntentFilter 的匹配原则 (Activity 的启动方式)
IntentFilter 的过滤信息包含 action ,category,data. 只有同时匹配过滤列表中的 action,category,data, 才能成功, 其中一个 Activity 可以有多个 IntentFilter, 一个 Intent 只要能匹配任何一组 IntentFilter, 就可以成功启动对应的 Activity
来源: http://www.jianshu.com/p/1e01f542d16b