Android Activity launchMode singleTask/singleTop/singleInstance/standard 讲解
2016-11-21 14:25
603 查看
先写一个基础的Activity实现日志打印,将各个生命周期的方法都打印出来。
2.实现多个Activity 注册mainifreset
测试单个Activity 生命周期
测试2个Activity跳转时的(Standard模式)
生命周期 分别为
onCreate ->onStart ->onResume ->onPause ->onCreate .Main4Activity->onStart .Main4Activity
->onResume .Main4Activity->onStop .Main3Activity
按返回键后 的生命周期流程:
2.测试2个Activity跳转时的(SingleTop模式)
singleTop模式和standard模式基本相同,唯一的区别就是当task中当前activity 在top的时候不在从新创建一个新的Activity。
3.SingleTask
当前Task中包含了Main3Activity的时候 从Main4Activity 跳转进入Main3Activity的生命周期活动,
不再创建新的Activity实例,而是调用onNewIntent .Main3Activity方法 将Intent中的参数传人已经创建好的实例当中。
singleTask如果已经在task中拥有实例,再次调用将会把task中该实例的前面的所有activity全部出栈进行销毁而且不会走生命周期。
4.singleInstance
singleinstance 独占一个 Task,不管是否跨进程Activity只会存在一个,如果如果已经拥有,调用后结果跟singleTask类似。
public class BaseActivity extends Activity{ public static final String tag ="BaseActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(tag,"onCreate "+getComponentName().getShortClassName()); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Log.d(tag,"onNewIntent "+getComponentName().getShortClassName()); } @Override protected void onStart() { super.onStart(); Log.d(tag,"onStart "+getComponentName().getShortClassName()); } @Override protected void onRestart() { super.onRestart(); Log.d(tag,"onRestart "+getComponentName().getShortClassName()); } @Override protected void onResume() { super.onResume(); Log.d(tag,"onResume "+getComponentName().getShortClassName()); } @Override protected void onPause() { super.onPause(); Log.d(tag,"onPause "+getComponentName().getShortClassName()); } @Override protected void onStop() { super.onStop(); Log.d(tag,"onStop "+getComponentName().getShortClassName()); } @Override protected void onDestroy() { super.onDestroy(); Log.d(tag,"onDestroy "+getComponentName().getShortClassName()); } }
2.实现多个Activity 注册mainifreset
<activity android:name=".Main3Activity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".Main4Activity"> </activity> <activity android:name=".Main5Activity" android:process=""> </activity>
测试单个Activity 生命周期
11-21 14:11:43.586 17004-17004/application D/BaseActivity: onCreate .Main3Activity 11-21 14:11:43.601 17004-17004/application D/BaseActivity: onStart .Main3Activity 11-21 14:11:43.602 17004-17004/application D/BaseActivity: onResume .Main3Activity 11-21 14:11:45.631 17004-17004/application D/BaseActivity: onPause .Main3Activity 11-21 14:11:46.183 17004-17004/application D/BaseActivity: onStop .Main3Activity 11-21 14:11:46.183 17004-17004/application D/BaseActivity: onDestroy .Main3Activity
测试2个Activity跳转时的(Standard模式)
11-21 14:12:54.390 17004-17004/application D/BaseActivity: onCreate .Main3Activity 11-21 14:12:54.414 17004-17004/application D/BaseActivity: onStart .Main3Activity 11-21 14:12:54.415 17004-17004/application D/BaseActivity: onResume .Main3Activity 11-21 14:12:56.241 17004-17004/application D/BaseActivity: onPause .Main3Activity 11-21 14:12:56.253 17004-17004/application D/BaseActivity: onCreate .Main4Activity 11-21 14:12:56.264 17004-17004/application D/BaseActivity: onStart .Main4Activity 11-21 14:12:56.264 17004-17004/application D/BaseActivity: onResume .Main4Activity 11-21 14:12:56.667 17004-17004/application D/BaseActivity: onStop .Main3Activity
生命周期 分别为
onCreate ->onStart ->onResume ->onPause ->onCreate .Main4Activity->onStart .Main4Activity
->onResume .Main4Activity->onStop .Main3Activity
按返回键后 的生命周期流程:
11-21 14:15:07.981 17004-17004/application D/BaseActivity: onPause .Main4Activity 11-21 14:15:07.987 17004-17004/application D/BaseActivity: onRestart .Main3Activity 11-21 14:15:07.987 17004-17004/application D/BaseActivity: onStart .Main3Activity 11-21 14:15:07.988 17004-17004/application D/BaseActivity: onResume .Main3Activity 11-21 14:15:08.362 17004-17004/application D/BaseActivity: onStop .Main4Activity 11-21 14:15:08.362 17004-17004/application D/BaseActivity: onDestroy .Main4Activity
2.测试2个Activity跳转时的(SingleTop模式)
singleTop模式和standard模式基本相同,唯一的区别就是当task中当前activity 在top的时候不在从新创建一个新的Activity。
3.SingleTask
当前Task中包含了Main3Activity的时候 从Main4Activity 跳转进入Main3Activity的生命周期活动,
不再创建新的Activity实例,而是调用onNewIntent .Main3Activity方法 将Intent中的参数传人已经创建好的实例当中。
singleTask如果已经在task中拥有实例,再次调用将会把task中该实例的前面的所有activity全部出栈进行销毁而且不会走生命周期。
11-21 14:19:21.167 5640-5640/application D/BaseActivity: onPause .Main4Activity 11-21 14:19:21.177 5640-5640/application D/BaseActivity: onNewIntent .Main3Activity 11-21 14:19:21.177 5640-5640/application D/BaseActivity: onRestart .Main3Activity 11-21 14:19:21.178 5640-5640/application D/BaseActivity: onStart .Main3Activity 11-21 14:19:21.178 5640-5640/application D/BaseActivity: onResume .Main3Activity 11-21 14:19:21.555 5640-5640/application D/BaseActivity: onStop .Main4Activity 11-21 14:19:21.555 5640-5640/application D/BaseActivity: onDestroy .Main4Activity
4.singleInstance
singleinstance 独占一个 Task,不管是否跨进程Activity只会存在一个,如果如果已经拥有,调用后结果跟singleTask类似。
相关文章推荐
- Understand Android Activity's launchMode: standard, singleTop, singleTask and singleInstance
- Understand Android Activity's launchMode: standard, singleTop, singleTask and singleInstance
- 理解Android的Activity launchMode:standard,singleTop,singleTask,singleInstance
- android Activity的四种启动模式详讲 singleTop standard singleTask singleInstance
- Activity的四种加载模式详解(standard singleTop singleTask singleInstance)
- android Task Activity launchMode="singleTask" singleInstance 代码分析
- Activity启动模式(standard singleTop singleTask singleInstance)图文详解
- Android 四种加载方式详解(standard singleTop singleTask singleInstance) .
- Activity设置启动模式android:launchMode="singleInstance" 按home键后会销毁
- Android活动的四种启动方式(standard singleTop singleTask singleInstance)
- Android 中 Activity 启动模式(singleInstance、singleTask、singleTop、standard)
- 区分Activity的四种加载模式 standard singleTop singleTask singleInstance
- Activity启动方式有四种,分别是:standardsingleTopsingleTasksingleInstance
- Android四种加载方式(standard singleTop singleTask singleInstance)
- 一个由Activity launchMode="singleTask"属性引起的血案(Android)
- Android 四种加载方式详解(standard singleTop singleTask singleInstance)
- android Activity android:launchMode="singleInstance" 与 startActivityForResult
- Activity的四种加载模式详解(standard singleTop singleTask singleInstance)
- Android 四种加载方式详解(standard singleTop singleTask singleInstance)
- Android 四种加载方式详解(standard singleTop singleTask singleInstance)