Android面试四大组件之Activity
Posted Rose J
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android面试四大组件之Activity相关的知识,希望对你有一定的参考价值。
目录
1. activity的生命周期
activity的生命周期依次是
onCreate ,onStart,onResume,onPause,onStop,onDestroy
当返回原来activity的时候会调用onRestart
2. activity的启动模式
activity的启动模式有四种,
第一种是standard,标准模式,这也是系统默认的启动模式
每次启动一个activity都会重新创建一个新的实例,不管这个实例是否已经存在,系统都会放一个新的实例放进任务栈
第二种是singleTop,栈顶复用模式,
每次启动一个activity,如果和任务栈顶这个activity一样,系统不会创建新的activity,而是回调onNewIntent方法,通过这个方法的参数取出当前请求的信息
第三种是singleTask,栈内复用模式,这是一种单实例模式,
每次启动一个新的activity,首先系统会寻找activity想要的任务栈,如果不存在,就会重新创建一个,如果存在,这个时候就要看任务栈中有没有和这个activity一样的实例,如果有,就会将这个实例调到栈顶并且调用它的onNewIntent方法,如果不存在就会创建activity的实例压入栈中,
第四种是singleInstance,单实例模式,这是一种加强的singleTask模式,不仅有singleTask模式的所有特性,他还加强了一点,就是创建的activity,任务栈中没有的话,就会为它创建一个新的任务栈。
3. activity的启动方法
1.显式启动
Intent intent = new Intent(this,MyActivity.class); startActivity(intent);
2.隐式启动
隐式启动。通过在androidManifest文件中为activity配置过滤信息来匹配到指定的activity:
<activity android:name=".activity.book.IntentFilterActivity"> <intent-filter> <action android:name="android.intent.action.super"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
activity中
Intent intent1 = new Intent(); intent1.setAction("android.intent.action.super"); startActivity(intent1);
4. activity A 打开 activity B 的生命周期
依次顺序是
activity A:onPause
activity B:onCreate
activity B:onStart
activity B:onResume
activity A:onStop
5. activity B 按下back,返回activity A的生命周期
activity B:onPause
activity A:onRestart
activity A:onStart
activity A:onResume
activity B:onStop
activity B:onDestroy
6. activity A 按下home键的生命周期
onPause
onStop
7. 屏幕横屏,activity的生命周期变化
当系统配置发生变化之后,activity会被销毁,然后onPause,onStop,onDestory都会被调用,同时由于activity是异常情况下终止的,系统会调用onSaveInstanceState来保存当前的activity的状态,当activity被重新创建以后,系统会调用onRestoreInstanceState取出之前保存的数据并恢复
onSaveInstanceState有可能在onPause之前调用,也可能在之后,但在onStop之前
onRestoreInstanceState在onStart之后
8.activity A 打开 activity B 的生命周期变化(B为singleInstance)
任务栈不同
9.activity A启动activity B ,再跳转 A的生命周期变化(A为singleTask)
任务栈相同
10.activity的标志位
FLAG_ACTIVTTY_NEW_TASK (栈内复用
这个标记位的作用是为Activity指定“ singleTask " 启动模式, 其效果和在XML 中指定该启动模式相同。
FLAG_ACTNITY _SINGLE_TOP (栈顶复用
这个标记位的作剧是为Activity指定“ singleTop ” 启动模式, 其效果和在XML 中指定该启动模式相同。
FLAG_ACTIVITY_CLEAR_TOP
具有此标记位的Activity,当它启动时, 在同一个任务栈中所有位于它上面的Activity都要出栈。 这个模式一般需要和FLAG_ACTIVITY_ NEW_ TASK配合使用, 在这种情况下,被启动Activity的 实例如果已经存在,那么系统就会调用它的onNewIntent。如果被启动的Activity采用 standard模式启动,那么它连同它之上的Activity都要出栈,系统会创建新的Activity实例并放入栈顶。 通过前面的分析可以知道,singleTask启动模式默认就具有此标记位的效果。
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
具有这个标记的Activity不会出现在历史Activity的列表中,当某些情况下我们不希望用户通过历史列表回到我们的Activity的时候这个标记比较有用。它等同于在XML中指定Activity的属性android:excludeFromRecents=”true ”。
以上是关于Android面试四大组件之Activity的主要内容,如果未能解决你的问题,请参考以下文章