美文网首页
Activity-启动模式解析

Activity-启动模式解析

作者: JackDaddy | 来源:发表于2020-05-13 11:23 被阅读0次

Android 中有存在着 4 种启动模式,standardsingleTopsingleTasksingleInstance,本篇文章将来解释下这四种模式在的一些基础知识,以及日常开发中的应用,下面通过几个问题来开始本篇文章:

  1. 什么是 Task
  2. TaskActivity 的关系是什么?
  3. 4 种启动模式特点分别是什么?
  4. 4 种启动模式的应用场景有什么?

在讲解 4 种启动模式之前需要先学习一下 Task 方面的知识:

Task 解析

Task 可以理解为处理一系列事务的 Activity 合集,那这样就存在两种情况:
1) 该 Task 所有的 Activity属于同一个APP;
2) 该 TaskActivity属于不同的APP;
无论是哪种情况,都属于同一个 Task ,记住是同一个 Task !!!

Task 作为用户的话,我们可以点击手机的 Navigation 按钮来查看当前运行的 Task 直观地查看Task
Task的启动方式
  1. 新建:含有 3 种启动方式
    1)通过通知启动 APP
    2)通过 Launcher(图标,自己)启动
    3)通过 scheme,第三方应用去启动 APP
    2.恢复:含有两种启动方式
    1)在 Task 一定存在的情况下,通过 Navigation 启动,参考上图,查看Task图片
    2)通过标题栏 back 按键 back按键 相信我们对 Activity 的生命周期的生命周期肯定都很熟悉了,下面主要来介绍一下 Activity 中一些比较容易忽略的知识点:
    1)生命周期的对应
    图片.png
    2)onCreateonStart 之间的区别
  • 可见与不可见的区别。onCreate 不可见,onStart 可见。
  • 执行次数的区别。onCreate 方法只在 Activity 创建时执行一次,而 onStart 方法在 Activity 的切换以及按Home键返回桌面再切回应用的过程中被多次调用。因此 Bundle 数据的恢复在 onStart 中进行比 onCreate 中执行更合适。
  • onCreate 能做的事 onStart 其实都能做,但是 onstart 能做的事 onCreate 却未必适合做。setContentView 和资源初始化在两者都能做,然而想动画的初始化在 onStart 中做比较好。
    3)onStart 方法和 onResume 方法的区别
  • 是否在前台。onStart 方法中Activity可见但不在前台,不可交互,而在 onResume 中在前台
  • 职责不同,onStart 方法中主要还是进行初始化工作,而 onResume方法,根据官方的建议,可以做开启动画和独占设备的操作。
    4)onPause 方法和 onStop 方法的区别
  • 是否可见。onPauseActivity 可见,onStopActivity不可见,但Activity对象还在内存中。
  • 在系统内存不足的时候可能不会执行onStop方法,因此程序状态的保存、独占设备和动画的关闭、以及一些数据的保存最好在onPause中进行,但要注意不能太耗时。
    5)onStop 方法和 onDestroy 方法的区别?
  • onStop 阶段 Activity 还没有被销毁,对象还在内存中,此时可以通过切换Activity 再次回到该Activity ,而 onDestroy 阶段 Acivity 被销毁。

在学习的过程中我们经常会遇到听到一个方法:onNewIntent,由于 standard 基本每次都会新建一个实例,因此没有这个方法,这个方法只存在于其他 3 种启动方式中。

下面就开始进入今天的主题 4 种启动方式的介绍:

standard

  • standard 的启动模式中,如果在 Task 中存在有实例的话,下次从Launcher(图标)进入的话不会再去新建一个实例,而是走OnRestart()过程。这是因为 Intent 中有一个 public static final int FLAG_ACTIVITY_NEW_TASK = 0x10000000;

    FLAG_ACTIVITY_NEW_TASK 通过上面这个谷歌的注释可以看出,当启动时带有这个FLAG时,而且Task中存在该实例的话,不会再去新建新建实例: FLAG_ACTIVITY_NEW_TASK 而且此时走的也是OnRestart()流程: 图片.png
  • 当启动一个带有 AffinityActivity 时,如果不带上newTask的话,新建的Activity则会在原来的Task上(所谓的 Affinity 可以理解一个 Task 的名称,当一个 Activity 不指定 Affinity 时,默认就是它的 PackageName

    指定Affinity时,不带newTask,创建在原来的Task上,不会新建Task 指定Affinity时,带上newTask,则新建一个Task,在该Task上新建实例
  • 如果指定的 Affinity 是默认的APP Affinity (PackageName)的话,每次都会新建一个实例

    该效果类似于上面的不指定new_Task

singleTop

指的是一个 Task 的栈顶只能存在一个实例,这里有一点值得注意的是,由于可以存在多个 Task ,因此就存在多个 Task 的栈顶存在相同一个实例的情况。
而当栈顶存在该实例的时候,下次进入的时候不会再去新建实例,而是会调用onNewIntent方法发送到现有的Activity

singleTop执行流程图 从上面可以看出NEW_TASK这个标志位,只影响standardsingleTop这两种启动模式

singleTask

singleTask 指的是一个Task中只允许存在一个实例,如果该Task中存在该实例的话,下次进入的话也是会通过onNewIntent方法发送到现有的Activity。同样地,由于可以存在多个 Task ,因此就存在多个 Task 中存在相同一个实例的情况。还有一点与singleTop不同的是,当找到Task中存在该实例时,会将它上面的实例清空掉(CLEAR_TOP)然后将实例提到栈顶。而singleTop则是在栈顶找不到实例时,在栈顶新建一个实例,不管它下面有没有。

singleTask流程图

singleInstance

通过这种方式启动的Activity 都处于一个单独的 Task 中,且该 Task 中也只有一个该实例,下次启动时,如果已经存在该 Task 不会再去新建实例,而是会调用onNewIntent方法发送到现有的Activity类似于singleTask

最后是这 3 种启动模式的应用场景:

应用场景

相关文章

  • Activity-启动模式解析

    Android 中有存在着 4 种启动模式,standard,singleTop,singleTask,singl...

  • Activity-启动模式

    一、Activity启动模式: 1.默认启动模式standard: 每次启动一个Activity都会重新创建一个新...

  • Activity-启动模式

    1分类简介 1 standard 标准,所有的activity实例都在一个task栈中,每次启动activity都...

  • 启动模式解析

    1. Android的软件体系结构 2. 理解Android中的Task Activity属于Applicatio...

  • Android知识总结

    Android 基础知识相关 activity 的四种启动模式。 activity 启动过程源码解析。 activ...

  • 启动模式

    1、Android进阶系列之启动模式 2、Android 深入解析 Activity 的 launchMode 启...

  • Activity启动模式解析

    主要内容 Activity是android的四大组件之一,可以说是我们android开发中最常用的技术之一。有关a...

  • Activity启动模式解析

    Activity启动模式 关于Activity的LaunchMode大家一定知道有以下四种: standard(标...

  • 全面解析:AndroidManifest.xml文件中activ

    activity代码示例 launchMode属性:Activity启动模式 具体解析请走——>>传送门:acti...

  • Activity 启动模式全解析

    Activity 启动模式全解析 一、任务与返回栈 (Tasks and Back Stack) 任务的定义:执行...

网友评论

      本文标题:Activity-启动模式解析

      本文链接:https://www.haomeiwen.com/subject/rmwynhtx.html