您的位置:首页 > 移动开发 > Android开发

Android Activity launchMode singleTask/singleTop/singleInstance/standard 讲解

2016-11-21 14:25 603 查看
先写一个基础的Activity实现日志打印,将各个生命周期的方法都打印出来。

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类似。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android
相关文章推荐