Android activity的启动模式浅析

来源:互联网 发布:照片解密软件 编辑:程序博客网 时间:2024/04/28 06:57

说到activity的启动模式,就先介绍一下activity吧,activity是android与用户交互的组件,也是android开发中使用频率最高的一个组件。

activity做为view的载体,可以将view展示给用户,同时具有多种生命周期形态。android系统采用activity栈的方式来管理activity。

一、activity生命周期:

可以参考android官网上提供的图来了解activity的生命周期:


其中 Resumed阶段,是activity的Running状态,此时的activity位于activity栈顶,处理用户的交互。

        Paused阶段,下面这段是android官网给出的应该做的操作:

  • Stop animations or other ongoing actions that could consume CPU.
  • Commit unsaved changes, but only if users expect such changes to be permanently saved when they leave (such as a draft email).
  • Release system resources, such as broadcast receivers, handles to sensors (like GPS), or any resources that may affect battery life while your activity is paused and the user does not need them.
其实主要是释放系统资源。

二、android任务栈:

数据结构中栈(Stack)的概念是一种先进后出(FILO)的线性表。

android系统中通过栈结构来管理app的activity。栈底的元素是整个任务栈的发起者。当一个app启动时,如果系统中不存在该app的任务栈,则会创建一个任务栈来管理该app的activity。

通过 adb shell dumpsys activity命令可以查看当前的activity栈,下面是我截取的qq音乐的activity任务栈:


android系统给activity一些特权来打破默认的栈式管理activity的方式,那就是启动模式。启动模式可以通过AndroidMainifest文件的

android:launchMode或Intent的flag来设置。

三、启动模式:

1、standard:

默认的启动模式,如果不指定启动模式,则使用这种方式来启动。这种方式每次都会创建一个新的activity实例。

2、singleTop:

如果使用这种启动模式,系统会判断当前栈顶的activity是不是要启动的activity,如果是,则不会创建新的activity而是直接引用该activity,并且调用onNewIntent()方法。如果不是,则创建一个新的activity实例。

3、singleTask:

singleTask模式是检测整个activity栈中是否有需要启动的activity实例,如果有,则将该activity置于栈顶,并且将该activity以上的activity都销毁,不过这里是指同一个app的activity栈,如果是其他程序已singleTask模式来启动这个activity,那么会创建一个新的任务栈。这种方式主要用于将一个app的主activity设置成singleTask,其他的设置成standard,这时如果要退出app,则退回到主activity,并且将之前的activity都销毁,再将这个activity销毁,会安全的退出app。

tips:这种启动模式启动的activity如果已经在一个任务栈中,启动后,这个任务栈会一起被切换到前台。可以借助官网的一张图来理解这一过程。


当activity2启动activityY时,activityY所在的任务栈会被放在前台,此时按下back键时,会先返回activityY所在Task的activity。

4、singleInstance

该模式启动的activity在系统中只有一个,并且独占一个任务栈。如果启动该模式的activity,会把这个任务栈放在前台。

0 0
原创粉丝点击