Android_Activity_Tasks和Back Stack详解

1.Tasks and Back Stack概述

一个task就是用户交互的多个被打开的activity的集合,设备的home按键往往是许多任务的一个起点。当用户点击app的起动图标或者快捷方式时,该app的任务将被前置,如果该app的task不存在,则创建一个与该app关联的task,main activity将被置于任务栈的栈底。

当activity A启动了一个新的activity B,则B将被压入back stack的栈顶并获得焦点处于resumed状态,A在B的下面处于stopped状态。当用户按下back按钮,B将弹出back stack的置于栈顶,此时B处于destroyed状态而销毁。当该app的activity在栈里全部移除后,该task也就不再存在了。当回到主屏或者开启新的task后,该task将作为一个整体,能够被置于后台,而处于stopped状态满足后进先出的原则!

2.Activity状态保存

注意:在同一个时刻,如果系统内存不足,将会销毁一些activity以恢复内存,具体了解Activity的状态保存

3.启动模式

(1)."standard"

activity的默认启动模式,该activity可以被实例化对此,可以在不同任务或者同一任务中。

(2)."singleTop"

在当前任务的栈顶,如果该activity已经存在,系统会自动调用该activity的onNewIntent()方法,而不是创建该activity的实例化对象。即除了该activity位于当前任务的栈顶之外,都需要重新实例化。

(3)."singleTask"

系统将为该activity创建一个新的任务,并将该activity置于新任务的栈底,如果该activity已经存在,系统通过调用onNewIntent()并移除该activity对应任务栈上的所有activity实例化对象,重新使用该activity,而不是实例化该activity。

(4)."singleInstance"

和"singleTask"相似,只不过该activity只存在于一个新的task中,并且该task只能存放当前一个activity对象。

在AndroidManifest.xml项目清单文件中可以设置activity的启动模式,而当通过intent标签重新指定该activity的启动模式后,该activity在项目清单文件中配置的启动模式将被覆写。关于通过intent配置activity这里暂时略去。

4.Activity在启动模式下的生命周期

Activity一文中已经阐述过Activity生命周期,这里主要介绍当activity设置了启动模式后,如果需要启动的该activity,则不需要重新实例化。按activity的当前状态区分

(1).paused

说明该activity可见,但是失去了焦点,onNewIntent()->onResume()

(2).stopped

说明该activity不可见,onNewIntent()->onRestart()->onStart()->onResume()

5.返回栈的清理

如果用户长时间离开一个任务,系统间会清理所有的activity对象除了root Activity,如果用户再次返回该任务,只有root activity被保存!可以通过下面的activity的xml标签去修改适合自己需求的属性。

(1).alwaysRetainTaskState

如果为一个任务的root activity设置该标签为true,上面的默认行为将不会发生,该任务的处在返回栈中所有的activity信息,在很长时间下也能被保存下来。

(2).clearTaskOnLaunch

如果为一个任务的root activity设置该标签为true,该任务栈将被清理。用户总是返回至该任务的初始化状态,即使只离开一会,和alwaysRetainTaskState正好相反。

(3).finishOnTaskLaunch

该属性和clearTaskOnLaunch类似,但是只能操作单个activity而不是整个任务。

6.启动一个任务

(1).设置main activity

You can set up an activity as the entry point for a task by giving it an intent filter with "android.intent.action.MAIN" as the specified action and "android.intent.category.LAUNCHER" as the specified category.

(2).通过设置启动模式

<activity
    android:name=".ActivityB"
    android:label="SingleTaskB"
    android:launchMode="singleTask" >
</activity>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值