前言
对于普通开发者来说可能对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 传送给它的已恢复实例(现在位于堆栈顶部)。
|