Android面试技术点总结
Activity
1Q: Activity的生命周期
A: 一个Activity在启动时依次调用onCreate、onStart、onResume方法,其中onResume方法代表Activity获得了屏幕焦点,在一个Activity销毁时会依次调用onPaus、onStop、onDestory方法,其中onPause方法代表Activity失去焦点,在屏幕上不可见。
2Q: Activity A启动另一个Activity B会回调哪些方法?如果Activity B是完全透明呢?如果启动的是一个对话框Activity呢?
A: A.onPause -> B.onCreate -> B.onStart -> B.onResume -> A.onStop
如果B完全透明或者是一个对话框Activity,则不会调用最后的A.onStop
3Q: 如何避免配置改变时Activity重建?
A: 在manifest中加入如下语句
android:configChanges="orientation|screenSize"
这样就不会在屏幕旋转时再次创建Activity,指定configChanges属性,重写onConfigurationChanged方法即可。
4Q: 优先级低的Activity在内存不足被回收后怎样做可以恢复到销毁前状态?
A: 优先级低的Activity在内存不足被回收后重新打开会引发Activity重建。Activity被重新创建时会调用onRestoreInstanceState(该方法在onStart之后),并将onSavaInstanceState保存的Bundle对象作为参数传到onRestoreInstanceState与onCreate方法。因此可通过onRestoreInstanceState(Bundle savedInstanceState)和onCreate((Bundle savedInstanceState)判断Activity是否被重建,并取出数据进行恢复。但需要注意的是,在onCreate取出数据时一定要先判断savedInstanceState是否为空。
5Q: Activity的四种启动模式
- standard模式,标准模式,每次Activity创建都会产生一个实例
- singleTop模式,当创建一个Activity时,检查栈顶的Activity是否是目标Activity,如果是,则返回栈顶Activity
- singleTask模式,当创建一个Activity时,检查栈中是否已经有一个目标Activity实例,如果有的话,则实例上所有对象全部出栈,将目标Activity移至栈顶
- singleInstance模式,具有此模式的Activity只能单独位于一个任务栈中,且此任务栈中只有唯一一个实例
6Q: onNewIntent()调用时机?
A: 在启动模式为SingleTask或者是SingleTop模式会调用onNewIntent方法,当不需要新建一个实例的话,就会调用。
7Q: 如何调用其他应用的Activity
A:使用隐式Intent与IntentFilter,匹配具体的Action、Category、Data。一个Activity可以有多个intent-filter,一个intent只要成功匹配任意一组intent-filter,就可以启动该Activity
8Q: Action、Category的匹配规则
A: 一个Activity可以设置多个Action,但只要有匹配一个Action就会唤醒Activity。一个Activity同样可以设置多个category,但需要全部匹配到才会唤醒Activity
9Q: Activity的启动过程
见博客
Fragment
1Q: Fragment的生命周期
A: onAttach()->onCreate()-> onCreateView()->onActivityCreated()->onStart()->onResume()->onPause()->onStop()->onDestroyView()->onDestroy()->onDetach()
其中和Activity有不少名称相同作用相似的方法,而不同的方法有:
- onAttach():当Fragment和Activity建立关联时调用
- onCreateView():当Fragment创建视图时调用
- onActivityCreated():当与Fragment相关联的Activity完成onCreate()之后调用
- onDestroyView():在Fragment中的布局被移除时调用
- onDetach():当Fragment和Activity解除关联时调用