Activity的启动模式以及onNewIntent和onConfigurationChanged这两个生命周期方法的场景

来源:互联网 发布:域名过户需要手续费吗 编辑:程序博客网 时间:2024/06/08 01:57

1.Activity的启动模式有哪几种,分别用于什么场景?

Activity的启动模式的4种:

  1. standard标准启动模式,默认的启动模式。每一次启动这个activity都会创建新的activity实例。被启动的activity会被放入启动者的栈中,如果启动者除Activity之外的Context(如Application),这时没有任务栈,就会报错,此时需要指定FLAG_ACTIVITY_NEW_TASK标记位,创建一个新的栈。

应用场景:绝大部分普通的场景下使用的acticity。

2.singleTop栈顶复用模式,设置这个模式的activity,如果任务栈的栈顶存在这个activity,则不会重新创建新的activity,这个activity 的onNewIntent()方法会被调用。

应用场景:通过通知栏来启动的页面。

3.singTask栈内唯一,在当前任务栈里面只能有一个activity实例的存在。当启动这种模式的activity时,会检查任务栈中是否存在这个activity,如果存在,则会调用该activity的onNewIntent()方法,并且把它上面的activity全部清空 ,这个activity称为栈顶。

应用场景:App中的一般使用的MainActivity或者其他一些需要占用大量系统资源的Activity。浏览器的主界面,不管多少个应用启动浏览器,只会启动一次浏览器主界面,其余的情况走OnNewIntent方法,并且会清空主界面上的其他actvity。

4.singleInstance,这个模式里面的activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在。启动这个模式的Activity,如果当前系统中有这个样的一个Activity已经被启动,会把它所在的任务栈切换到前台,这个activity的onNewIntent()会被调用。如果你要保证在整个手机操作系统里面只有这一个activity,则可以使用这个模式。

应用场景:打电话界面

2.描述onNewIntent和onConfigurationChanged这两个生命周期方法的场景?

(1) 这几种场景下Activity不会重新被创建,onNewIntent方法会被调用。

1.singtop模式启动的activity,在任务栈中存在。

2.singTask模式启动的activity,任务栈中存在。

3.singInstance模式启动的acitivity,系统中已经存在一个栈包含这个activity。
这些情况下可以通过setIntent(intent)来刷新intent数据.

(2)默认情况下,当系统配置(如系统语言,屏幕方向)发生改变后,系统会销毁当前的activity重新创建一个新的activity,重新执行一次生命周期方法。

如果屏幕旋转时,不希望Activity被销毁,可以在配置信息中声明:
android:configChanges = “orientation|screenSize”在这种情况下,如果屏幕旋转方向,Activity则不会被销毁,他的onConfigurationChanged()方法会被调用,通过读取configuration来读取对象中最新的配置来适配UI界面.

参考刚哥留下的标准答案。

阅读全文
1 0
原创粉丝点击