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)

任务栈不同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IklTBuGr-1622046055577)(G:\\桌面\\image\\图像\\1622046011082.png)]

9.activity A启动activity B ,再跳转 A的生命周期变化(A为singleTask)

任务栈相同
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5avnYLqa-1622215661957)(G:\\桌面\\image\\图像\\1622215488180.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yAlmxSPt-1622215661960)(G:\\桌面\\image\\图像\\1622215628630.png)]

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的主要内容,如果未能解决你的问题,请参考以下文章

Android安卓四大组件之Activity

四大组件之Activity(下)——Activity的常用Manifest属性启动模式ADB调试

Android安卓四大组件之Activity

Android 四大组件之Activity 基础总结

Android安卓四大组件之Activity

Android之四大组件六大布局五大存储 总结