Activity的四种启动模式
2017-12-04 18:08
351 查看
1、Activity的启动模式有哪几种,分别用于什么场景?
standard 标准模式
singleTop 栈顶复用模式
singleTask 栈内复用模式
singleInstance 单例模式
2、清晰地描述下onNewIntent和onConfigurationChanged这两个生命周期方法的场景?
(1)onNewIntent(Intent intent)
当Activity的启动模式设置为singleTop() ,singleTask () ,singleInstance()时,重新启动该Activity时不会调用其onCreate()方法,而是调用onNewIntent(Intent intent)方法通过设置 setIntent(intent)来刷新数据。
(2)onConfigurationChanged(Configuration newConfig)
configChanges设置常用取值:
注意:横竖屏切换时,如果 targetSdkVersion 的值大于等于13,需要配置
才会回调onConfigurationChanged 方法
如果 targetSdkVersion 的值大于等于13,只需配置
standard 标准模式
默认模式。每次启动Activity都会创建一个新的实例位于栈顶。谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在的栈中。因ApplicationContext()没有任务栈,所以无法采用标准模式启动Activity。但可通过为待启动的Activity指定标记位:FLAG_ACTIVITY_NEW_TASK,那么在启动时就会为其创建一个新的任务栈(这实际上是采用了singleTask启动模式)。这种模式下,允许有多个相同的实例,也允许多个相同Activity叠加。
singleTop 栈顶复用模式
如果需要新建的Activity位于任务栈栈顶,那么此Activity的实例就不会重建,而是重用栈顶的实例( 调用实例的 onNewIntent() 、不调用onCreate()和onStart())否则就会创建该Activity新的实例,并放入栈顶。 这种模式下可以有多个实例,但是不允许多个相同的Activity叠加。 使用场景:适合接收通知启动的内容显示页面。 例如:某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。
singleTask 栈内复用模式
在同一个应用程序中启动它时,若Activity不存在,则会在当前task创建一个新的实例,否则则会把task中在其之上的其他Activity 杀死并调用他的onNewIntent()方法。 使用场景:适合作为程序入口点。 例如:浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。
singleInstance 单例模式
只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。 使用场景:适合需要与程序分离开的页面。多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。 例如:将闹铃提醒与闹铃设置分离。
2、清晰地描述下onNewIntent和onConfigurationChanged这两个生命周期方法的场景?
(1)onNewIntent(Intent intent)
当Activity的启动模式设置为singleTop() ,singleTask () ,singleInstance()时,重新启动该Activity时不会调用其onCreate()方法,而是调用onNewIntent(Intent intent)方法通过设置 setIntent(intent)来刷新数据。
(2)onConfigurationChanged(Configuration newConfig)
当系统的配置信息发生改变时,系统会调用此方法。注意,只有在配置文件 AndroidManifest 中处理了 configChanges属性 对应的设备配置,该方法才会被调用。如果发生设备配置与在配置文件中设置的不一致,则Activity会被销毁并使用新的配置重建。 你可以在这里声明activity可以处理的任何配置改变,当这些配置改变时不会重新启动activity,而会调用activity的 onConfigurationChanged(Resources.Configuration)方法。如果改变的配置中包含了你所无法处理的配置(在android:configChanges并未声明), 你的activity仍然要被重新启动,而onConfigurationChanged(Resources.Configuration)将不会被调用。
configChanges设置常用取值:
locale:用户选择一种新的语言 touchscreen:更换手机屏幕. keyboard:键盘类型发生改变,如更换外置键盘. keyboardHidden:手机键盘是否可显示被设置,如已使用外置键盘. navigation:导航系统发生改变. screenLayout:手机屏幕布局发生改变,如新的屏保被激活. fontScale:手机字体发生改变. uiMode:2.2系统之后才出现,如用户把手机放桌子上、车子上或默认模式被启用. orientation:手机屏幕切换,如横竖屏;如果运行sdk在13及以上,也需要加上screenSize. screenSize:可用屏幕大小发生改变;sdk在12及以下不需要注意. smallestScreenSize:手机屏幕发生改变,且不用顾及转屏的问题;如放到一个投影仪查看手机,API13以上添加的属性. layoutDirection:手机屏幕左右或上下互换,API17以上添加的属性.
注意:横竖屏切换时,如果 targetSdkVersion 的值大于等于13,需要配置
android:configChanges='orientation|screenSize'
才会回调onConfigurationChanged 方法
如果 targetSdkVersion 的值大于等于13,只需配置
android:configChanges='orientation'
相关文章推荐
- Activity四种启动模式
- Activity中的四种启动模式
- Activity的四种启动模式
- android activity启动的四种模式
- activity 的四种启动模式
- Android中Activity的四种启动模式详解
- android activity的四种启动模式
- Android Activity 四种启动模式
- Activity四种启动模式
- Activity的四种启动模式详解
- Activity入门---activity的四种启动模式
- Activity的四种启动模式和onNewIntent()
- Activity四种启动模式
- Android中Activity的四种启动模式
- Activity的四种启动模式
- activity四种启动模式
- Android-Activity的四种启动模式
- activity的四种启动模式的区别
- Activity的四种启动模式-图文并茂
- Activity的四种启动模式