​android:launchMode=

["multiple" |

"singleTop" |

"singleTask" |

"singleInstance"

]


  1. A。class



    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 package com.example.login; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class AActivity extends Activity { private static int mIndex= 1 ; @Override protected void onCreate(Bundle arg0) { // TODO Auto-generated method stub super .onCreate(arg0); setContentView(R.layout.layout_task); System.out.println( "------ A activit------:" +mIndex+ "---Agettaskid--" +getTaskId()); ++mIndex; Button buttonStartA = (Button) findViewById(R.id.buttonA); buttonStartA.setOnClickListener( new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(AActivity. this , AActivity. class ); startActivity(intent); } }); Button buttonStartB = (Button) findViewById(R.id.buttonB); buttonStartB.setOnClickListener( new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(AActivity. this , BActivity. class ); startActivity(intent); } }); } @Override protected void onDestroy() { // TODO Auto-generated method stub super .onDestroy(); System.out.println( "----activity a destory--" ); } }

B。class

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 package com.example.login; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class BActivity extends Activity { private static int mIndex = 1 ; @Override protected void onCreate(Bundle arg0) { // TODO Auto-generated method stub super .onCreate(arg0); setContentView(R.layout._layout_task); System.out.println( "-------- BActivity-------:" + mIndex + "--TASKID:" + getTaskId()); ++mIndex; Button buttonStartA = (Button) findViewById(R.id.buttonA); buttonStartA.setOnClickListener( new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(BActivity. this , BActivity. class ); startActivity(intent); } }); Button buttonStartB = (Button) findViewById(R.id.buttonB); buttonStartB.setOnClickListener( new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(BActivity. this , AActivity. class ); startActivity(intent); } }); } @Override protected void onNewIntent(Intent intent) { // TODO Auto-generated method stub super .onNewIntent(intent); System.out.println( "---New Intent activity b--:" + mIndex + "--TASKID--" + getTaskId()); } @Override protected void onDestroy() { // TODO Auto-generated method stub super .onDestroy(); System.out.println( "---activity b destory" ); } }

  1. singleTop 处在堆栈的顶端的时候只实例化一次


让B设置为singleTop

启动后 跳转到A 跳转到B 跳转到B 在跳转到B 在跳转B


1 2 3 4 5 6 11 - 07 06 : 01 : 51.371 : I/System.out( 13571 ): ------ A activit------: 1 ---Agettaskid-- 11 11 - 07 06 : 02 : 21.087 : I/System.out( 13571 ): ------ A activit------: 2 ---Agettaskid-- 11 11 - 07 06 : 02 : 24.171 : I/System.out( 13571 ): -------- BActivity-------: 1 --TASKID: 11 11 - 07 06 : 02 : 25.735 : I/System.out( 13571 ): ---New Intent activity b--: 2 --TASKID-- 11 11 - 07 06 : 02 : 26.695 : I/System.out( 13571 ): ---New Intent activity b--: 2 --TASKID-- 11 11 - 07 06 : 02 : 27.471 : I/System.out( 13571 ): ---New Intent activity b--: 2 --TASKID-- 11

不论按几下跳转B 都只显示一个 BActivity。。

但显示了三次的onNewIntent()函数的输出值 说明 此时没有执行oncreate()函数值执行了onNewIntent()函数。


现在跳转A 再按跳转B

1 2 11 - 07 06 : 04 : 34.327 : I/System.out( 13571 ): ------ A activit------: 3 ---Agettaskid-- 11 11 - 07 06 : 04 : 36.107 : I/System.out( 13571 ): -------- BActivity-------: 2 --TASKID: 11

说明在栈顶的时候无论按多少次只显示一次


结论:B不在栈顶时,依然会创建B的新实力

当B在栈顶的时候,请求启动B的intent并没有触发创建B的新实例,

而是出发了栈顶B的onNewIntent();


2.SingleTask :


设置B为singleTask

启动A 启动B 启动A 启动B 这四步。

1 2 3 4 5 6 11 - 07 06 : 21 : 03.743 : I/System.out( 15039 ): ------ A activit------: 1 ---Agettaskid-- 12 11 - 07 06 : 21 : 32.283 : I/System.out( 15039 ): ------ A activit------: 2 ---Agettaskid-- 12 11 - 07 06 : 21 : 39.579 : I/System.out( 15039 ): -------- BActivity-------: 1 --TASKID: 12 11 - 07 06 : 21 : 42.619 : I/System.out( 15039 ): ------ A activit------: 3 ---Agettaskid-- 12 11 - 07 06 : 21 : 44.503 : I/System.out( 15039 ): ---New Intent activity b--: 2 --TASKID-- 12 11 - 07 06 : 21 : 44.935 : I/System.out( 15039 ): ----activity a destory--

现在栈里面 从下往上的顺序 是

A1 A2 B1 A3

当在次启动B的时候因为B设置了singlTask。所以不实例化B了。值执行了onNewIntent()然后把A3销毁了

结论:当B已经存在了。再次请求B会触发已经存在的B1实例的onNewIntent()

并且如果B所在的任务栈上面有其他的Activity,那么其他的Activity也会被销毁

3.SingleInstance :

启动A

启动B 此时新创建一个任务栈18 ,和先前的A1 并不在一个任务

启动B 没有创建新的实例

启动A 在17任务栈里面实例化一个A

1 2 3 4 5 11 - 07 06 : 53 : 34.335 : I/System.out( 17523 ): ------ A activit------: 1 ---Agettaskid-- 17 11 - 07 06 : 53 : 44.275 : I/System.out( 17523 ): ------ A activit------: 2 ---Agettaskid-- 17 11 - 07 06 : 53 : 47.043 : I/System.out( 17523 ): -------- BActivity-------: 1 --TASKID: 18 11 - 07 06 : 53 : 49.271 : I/System.out( 17523 ): ---New Intent activity b--: 2 --TASKID-- 18 11 - 07 06 : 53 : 51.571 : I/System.out( 17523 ): ------ A activit------: 3 ---Agettaskid-- 17

按下back键离栈的话顺序是

1 2 3 4 11 - 07 06 : 56 : 35.187 : I/System.out( 17523 ): ----activity a destory-- 11 - 07 06 : 56 : 39.435 : I/System.out( 17523 ): ----activity a destory-- 11 - 07 06 : 56 : 44.055 : I/System.out( 17523 ): ----activity a destory-- 11 - 07 06 : 56 : 53.071 : I/System.out( 17523 ): ---activity b destory

先把17任务栈里面的A都销毁了。在去销毁18任务栈

singleInstance独立成立一个任务栈 这个栈里面只有B一个。始终是一个

离栈的时候先退当前的task,再退另外的task。


更多相关文章

  1. Android(安卓)Wi-Fi EAP-SIM代码解析
  2. Android官方入门文档[4]启动另一个Activity
  3. Android(安卓)抽屉导航
  4. [Android(安卓)UI] Activity Maintheme (Android(安卓)解决程序
  5. [1] Android主要源代码组成
  6. 【Android(安卓)系统开发】 Android(安卓)系统启动流程简介
  7. Android(安卓)Studio 活动的启动模式 standard singleTop single
  8. android facebook authorize 时禁止调用facebook app
  9. Android开发:android studio启动后,报错:Could not find com.androi

随机推荐

  1. 详解 Android(安卓)的 Activity 组件
  2. 前言:Android进阶汇总(持续更新)
  3. Android(安卓)学习记录-ImageView显示格
  4. Android(安卓)9.0 Launcher源码分析(三)—
  5. Android虚拟机大屏幕设置
  6. 详解 Android(安卓)的 Activity 组件
  7. 从零开始学习android
  8. 全网最全的Android资源汇总
  9. android 重用 c代码
  10. android studio 中一些比较好的插件