Android启动模式以及如何通过adb指令查看app当前运行的activity

Activity的启动模式是我们实际开发以及面试中经常会用到的知识点,对Activity的四种启动模式我们应该有一个比较清楚的理解。先声明,这里的阐述比较适合初学者,如果有更深入的理解,欢迎大家批评指正。

<1>首先如何设置Activity的启动模式

  

<2>Activity的启动模式分为四种standard,singleTop,singleTask,singleInstance

standard:标准模式,如果我们不在清单文件里配置的话默认是该模式(但我们新建项目时,MainActivity默认是SingleTask模式,这个我们后面说)。standard模式,其实就是无论Activity是否在栈顶,总是不断的创建新的实例,然后在任务栈里不断的叠加。比如我们创建了Aactivity,从A跳转到B,跳转到C,再回到A时,在任务栈中的排序应该是这样的:

Aactivity(栈底),Bactivity,Cactivity,Aactivity(栈顶)。


singleTop:可以创建多个相同的实例,但不会允许相同的实例在栈顶叠加。也就是说如果activity恰好在栈顶的话就不会创建新的实例,而是直接复用。如果不在栈顶,就创建新的实例。

例如:Aactivty,跳转到Bactiivty,在栈顶的是Bactivity,此时再跳转到Aactivity的话就会创建新的实例,在任务栈中的排序是A(栈底),B,A(栈顶,这个Aactivity是第二次创建的)。

Aactivity跳转到Bactivity,在栈顶的是Bactivity,此时再跳转到Bactivity的话Bactivity就不会创建新的实例而是直接复用已经存在Bactivity,所以在任务栈中的排序就是Aactivity(栈底)Bactivity(栈顶)


singleTask:只有一个实例,如果当前应用中,不存在这个实例的话,就创建新的实例,如果已经存在了,注意了,就会把在它上面的其它Activity destory掉并调用它的onNewIntent方法。例如,假设当前任务栈中的排序是Aactivity(栈底),Bactivity,Cactivity,如果此时想要跳转到Activity,就会把B和C破坏掉,使得A到达栈顶的位置复用。我们在创建新项目时MainActivity默认是singleTask模式,就是为了使MainActivity尽量在栈底,这样在退出应用程序时,只要把MainActivity退出finsih()掉了,就可以退出App,否则的话你得APP可能需要多次退出才能真正退出。


singleInstance:只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。这个模式用的相对较少

<3>如果大家相对自己的APP不同模式下Activity的运行情况进行检验,可以试下直接在cmd中输入一下指令:

adb shell dumpsys activity(注意将adb设置成全局变量,另外手机中运行的其他APP的activity可能比较多,所以尽量关闭其他程序,并通过包名检验是否是自己的APP中的activity)
 
  

你可能感兴趣的:(原理分析)