IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> android-了解任务和返回堆栈 -> 正文阅读

[移动开发]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 传送给它的已恢复实例(现在位于堆栈顶部)。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:30:55  更:2021-11-10 12:33:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:35:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码