Android了解任务和返回堆栈

前言

对于普通开发者来说可能对Activity的声明周期已经非常熟悉了 ,但是对于任务 和返回栈 启动模式等可能还会有些疑惑,该篇文章进行讲解

什么是任务

思考一下 Android开发中的任务指的是什么呢?

作为程序员的我们 无时无刻不在接受任务 完成任务 ,任务就是完成某件事,或达成什么样的目的 ,在Android中我们可以进行交互方式就是间接或者直接的和Activity交互,所以在Android中的任务指的是 用户通过操作一系列的Activity来完成某项工作。

Android中任务的管理

Android是如何管理任务的呢?

通过上边我们已经知道了任务就是一系列Activity的集合 ,对任务的管理也就是对内部的Activiyt的管理了,这个大家都知道 是通过一个返回栈来管理了。

任务的启动

常规的任务都是通过屏幕的启动图标启动的,这里分为两种情况 一种是当前任务启动过但是不在前台,此时任务会转到前台,另一种是当前任务不存在 此时会创建任务并显示主Activity

任务什么时候会被销毁呢?

任务会在其存储Activity中的堆栈中没有Activity是销毁(通过物理返回键 一直弹出Activity) ,另外通过手机的最近任务也可以手动的关闭任务

任务的切换
用户可以通过最近任务的物理按键来切换在后台的多个任务,这里注意 在后台的任务内部的Activity会全部暂停,但是在堆栈内部的结构是不会变的

Activity和任务的默认行为

  • 当 Activity A 启动 Activity B 时,Activity A 会停止,但系统会保留其状态(例如滚动位置和输入到表单中的文本)。如果用户在 Activity B 中按返回按钮,系统会恢复 Activity A 及其状态
  • 当用户通过按主屏幕按钮离开任务时,当前 Activity 会停止,其任务会转到后台。系统会保留任务中每个 Activity 的状态。如果用户稍后通过点按该任务的启动器图标来恢复该任务,该任务会进入前台并恢复堆栈顶部的 Activity。
  • 如果用户按返回按钮,当前 Activity 将从堆栈中退出并销毁。堆栈中的上一个 Activity 将恢复。Activity 被销毁后,系统不会保留该 Activity 的状态
  • Activity 可以多次实例化,甚至是从其他任务对其进行实例化

管理任务
Android 管理任务和返回堆栈的方式是将所有接连启动的 Activity 放到同一任务和一个“后进先出”堆栈中。

定义启动模式

启动模式能干啥?

首先启动模式一般来说是Activity的启动模式,那我们不难想到 启动模式应该就是设置Activity如何和当前的任务进行关联的,设置启动模式有两种方式。

  • 使用清单文件:当您在清单文件中声明 Activity 时,您可以指定该 Activity 在启动时如何与任务关联。在配置文件中使用launchMode属性来指定启动模式

    standard:标准启动模式

    系统在创建Activity的任务中启动新Activity然后将intent传递给该实例,Activity可以多次实例化,每个实例可以属于不同的任务,一个任务可以拥有多个实例

    singleTop:

    如果当前任务的顶部已经存在Activity的实例,则系统通过调用其onNewIntent()方法将 intent转给该实例,而不是创建Activity的新实例 ,Activity可以多次实例化,每个实例可以属于不同的任务,一个任务可以拥有多个实例(前提是不是栈顶Activity)

    singleTask

    系统会创建一个新的任务,并且实例化新的Activity,如果如果另外的任务中已经存在来Activity实例,则不会创建新的实例而是通过onNewIntent()将现有的intent转发给当前实例,Activity只能有一个实例

    singleInstance

    该启动模式和singleTask相似,唯一的不同是 该启动模式下 Activity是任务中的唯一一个Activity实例

  • 使用intent标记:当您调用 startActivity() 时,可以在 Intent 中添加一个标记,用于声明新 Activity 如何(或是否)与当前任务相关联

    FLAG_ACTIVITY_NEW_TASK

    对应于配置文件中的singleTask

    FLAG_ACTIVITY_NEW_TASK

    对应于配置文件中的singleTop

    FLAG_ACTIVITY_CLEAR_TOP

    如果要启动的 Activity 已经在当前任务中运行,则不会启动该 Activity 的新实例,而是会销毁位于它之上的所有其他 Activity,并通过 onNewIntent() 将此 intent 传送给它的已恢复实例(现在位于堆栈顶部)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值