前言
虽然有很多面试的文章里都有这些题目,但是我每次在看的时候,总是会觉得有些分散,复习的时候还要重新去找到对应的文章,所以我就想着自己来整理一下,并且把题目给分一下类型;自己整理可以帮助我复习的同时还可以巩固一遍;这次主要是4大组件相关,后续我会继续整理,觉得有帮助的可以点个赞。
今天先分享的是关于Activity的面试题:
描述一下Activity 生命周期?
- onCreate() Activity第-次被创建的时候调用,一些初始化操作可以在这里完成。
- onStart() 这个方法在Activity 由不可见变为可见的时候调用。
- onResume() 这个方法在Activity 准备好和用户进行交互的时候调用。此时的Acivity一定位于返回栈的栈顶,并且处于运行状态。
- onPause() 这个方法在系统准备去启动或者恢复另-个Activity的时候调用。
- onStop() 这个方法在Activity 完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新Activity 是一个对话框式的Activity,那么onPause()方法会得到执行,而onStop()方法并不会执行。
- onDestroy() 这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。
- onRestart 这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。
生命周期:为了巩固记忆,画了一遍。
Activity之间跳转时的生命周期
A Activity 打开 B Activity 时都有哪些生命周期回调?
A.onPause -> B.onCrete -> B.onStart -> B.onResume -> A.onStop
这样回答只是及格,因为仅在 B Activity 的 launchMode 为 standard 或者 B Activity 没有可复用的实例时是这样的。
当 B Activity 的 launchMode 为 singleTop 且 B Activity 已经在栈顶时(一些特殊情况如通知栏点击、连点),此时只有 B 页面自己有生命周期变化:
B.onPause -> B.onNewIntent -> B.onResume
当 B Activity 的 launchMode 为 singleInstance ,singleTask 且对应的 B Activity 有可复用的实例时,生命周期回调是这样的:
A.onPause -> B.onNewIntent -> B.onRestart -> B.onStart -> B.onResume -> A.onStop -> ( 如果 A 被移出栈的话还有一个 A.onDestory)
Activity的启动模式
有4种启动模式:
- standard 标准模式
- singleTop 栈顶复用模式
- singleTask 栈内复用模式
- singleInstance 单例模式
标准模式:每次启动时,都会创建一个新的实例在栈顶
栈顶复用模式:如果需要新创建的实例就在栈顶,那么就不会去重建,而是重用,否则就重新创建。
栈内复用模式:如果实例在当前栈中已经存在,就会将当前实例上面的其他实例都移除栈。
单例模式:直接创建一个新的栈并且创建实例放在栈中。
使用方