Android Studio教程04-Task和Back stack

1.Tasks and Back Stack

1.1. 当点击Back按钮返回到上一个Activity时发生了什么?

后进-先出原则

点击Back

1.2. 点击HOME按钮

当点击HOME按钮的时候,原activity停止,但是整个activity依然完整,用户返回这个task的时候,依然保持用户离开时的样子

diagram_multitasking.png

1.3.多次点击进入Activity-Back按钮

  • Activtiy会被多次实例化--我们可以避免它

diagram_multiple_instances.png

2.管理任务

  • 一般情况下任务都遵循后进-先出的原则,无特殊情况不需要去更改它
  • 但是有时候可能遇到下面的情况:
    • 希望在现Activity中启动新的Task(从当前app跳到另外一个app)
    • 不希望activity被多次实例化
    • 明确back stack的activity
  • 怎么做?
    • AndroidManifest.xml中的<activity>添加属性
      • taskAffinity
      • launchMode
      • allowTaskReparenting
      • clearTaskOnLaunch
      • alwaysRetainTaskState
      • finishOnTaskLaunch
    • startActivity()之前的Intent中添加参数
      • FLAG_ACTIVITY_NEW_TASK
      • FLAG_ACTIVITY_CLEAR_TOP
      • FLAG_ACTIVITY_SINGLE_TOP

    2.1. 定义启动模式

    定义新的Activity与当前的Task如何关联

    (1).method1: 在mainifest中声明

属性模式含义
`launchMode``standard(default)`activity可以创建多次,每个task可以含有多个实例(A-B-C: A-B-C-C)
`singleTop`当activity在top时,不会创建新实例(A-B-C: A-B-C)(A-B-C: A-B-C-B)
`singleTask`创建新的Task和实例化activity,但是如果activity之前已经存在,不会实例化
`singleInstance`上同

diagram_backstack_singletask_multiactivity.png

### (2).method2: 在Intent flag中声明

flas含义与method1匹配
FLAG_ACTIVITY_NEW_TASK在新的Task中开启Activit,如果这个task已经存在,直接将他调用到前端singleTask
FLAG_ACTIVITY_SINGLE_TOP如果在当前activity中再次开启当前activity,直接调用onNewIntent()方法,不会创建新实例singleTop
FLAG_ACTIVITY_CLEAR_TOP如果将要开启的actiivty存在于当前task中,直接销毁task中该activity之前的所有activity
然后调用onNewIntent()方法,不会创建新实例
----

转载于:https://www.cnblogs.com/haochen273/p/10281116.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值