博客
关于我
Android启动模式详解
阅读量:785 次
发布时间:2019-03-24

本文共 1911 字,大约阅读时间需要 6 分钟。

Android 启动模式与任务栈深度解析

作为一个开发者,了解Android启动模式及其背后的机制至关重要。今天我们将深入探讨Android中的启动模式,重点分析singleTask、singleInstance等模式下任务栈的变化,这对理解任务管理和 Activity 生命周期至关重要。


一、启动模式的基本概念

在Android系统中,启动模式决定了如何启动新的Activity及其任务栈关系。不同的启动模式共同遵循以下规则:

  • ActivityRecord:表示一个Activity的实例,包含了该Activity的所有配置信息。
  • TaskRecord:包含多个ActivityRecord,形成一个任务(Task),每个Task具有后进先出的栈结构。
  • ActivityStack:管理多个TaskRecord,表示一个完整的Activity栈。
  • 这些组件共同定义了任务的创建和管理逻辑。


    二、标准启动模式

    1. 启动方式

    默认启动模式(standard mode)下,系统会为每个新启动的Activity创建新的实例。此时,每个App组件可以独立维持多个任务栈。

    2. 任务栈变化

    如果AppA启动AppB,AppB再启动AppA,任务栈变化如下:

    • AppA和AppB各自形成独立的TaskRecord。
    • 两个任务栈独立存在,没有共享。

    3. 参数设置

    • intent旗帜:设置Intent.FLAG_ACTIVITY_NEW_TASK会创建新任务栈。
    • taskAffinity:指定任务栈的名称,可避免任务栈冲突。

    三、单栈顶模式(singleTop)

    1. 启动方式

    singleTop模式下,系统会尝试复用栈顶的Activity实例。

    • 如果栈顶Activity是目标Activity,intent会调用onNewIntent(),否则会创建新实例。

    2. 栈顶复用示例

    • 如果AppA以standard模式启动AppB,AppB再以singleTop启动AppA,会发现栈顶是AppA的实例,直接调用onNewIntent()。
    • 如果AppA不在栈顶,只有创建新实例并进入栈底。

    四、单任务模式(singleTask)

    1. 启动方式

    singleTask模式下,系统要求同一任务中仅有一个Activity实例。

    2. 实例复用

    • 如果已经存在目标Activity的实例,intent会调用onNewIntent(),否则创建新实例。
    • 这与singleTop模式不同,任务中可以包含多个Activity但仅有一个实例。

    五、单实例模式(singleInstance)

    1. 启动方式

    singleInstance模式下,同一任务只能有一个Activity实例。

    2. 任务栈表现

    • 每个App都会独立创建一个任务栈。
    • 如果从AppA启动AppB(AppB为singleInstance),AppB会有独立的任务栈,不存在共享任务栈。

    六、任务栈管理的深入理解

    1. taskAffinity配置

    • taskAffinity指定任务栈的名称,避免不同应用的任务混淆。
    • 未配置的任务栈所属应用包名。

    2. FLAG_ACTIVITY_NEW_TASK

    • 创建新任务栈时,必须设置该标志。
    • 否则,默认根据应用包名决定任务栈。

    七、任务栈变化的关键点

  • Standard模式

    • 未设置参数:默认创建新任务。
    • 已设置FLAG_ACTIVITY_NEW_TASK:创建新任务。
    • 已设置taskAffinity:创建指定名称的新任务。
  • SingleTop模式

    • 若当前任务栈顶是目标Activity,复用存在的实例;否则创建新任务。
  • SingleTask模式

    • 和singleInstance模式相似,但允许同一任务中存在多个活动。
  • SingleInstance模式

    • 每个App都有独立的任务栈。

  • 八、任务栈的实际表现

    通过实际案例可看出:

    • singleTask模式下的App activity 不会直接被销毁,仍旧存在任务栈中。
    • singleTop模式与标准模式在实际运行中存在差异,需谨慎使用。

    九、关键技术点总结

  • onNewIntent方法:

    • 接收新的intent,处理与老intent不同的内容。
  • TaskId唯一性

    • 用于区分不同实例,需通过TaskRecord获取。
  • 任务栈复用之单栈顶与单实例

    • 栌顶复用属于singleTop模式,单实例属于singleInstance模式。

  • 通过以上分析,我们可以清晰地理解不同启动模式下任务栈的创建和管理机制。这对于优化应用性能、解决启动模式问题至关重要。如有疑问,欢迎在评论区留言!

    转载地址:http://inlkk.baihongyu.com/

    你可能感兴趣的文章
    Opacity多浏览器透明度兼容处理
    查看>>
    OPC在工控上位机中的应用
    查看>>
    VSCode在终端中使用yarn命令
    查看>>
    OPEN CASCADE Curve Continuity
    查看>>
    Open Graph Protocol(开放内容协议)
    查看>>
    Open vSwitch实验常用命令
    查看>>
    Open WebUI 忘了登入密码怎么办?
    查看>>
    open***负载均衡高可用多种方案实战讲解02(老男孩主讲)
    查看>>
    Open-E DSS V7 应用系列之五 构建软件NAS
    查看>>
    Open-Sora代码详细解读(1):解读DiT结构
    查看>>
    Open-Sora代码详细解读(2):时空3D VAE
    查看>>
    Open-Source Service Discovery
    查看>>
    open-vm-tools-dkms : 依赖: open-vm-tools (>= 2:9.4.0-1280544-5ubuntu3) 但是它将不会被安装
    查看>>
    open3d-Dll缺失,未找到指定模块解决
    查看>>
    openai Midjourney代理服务 gpt大模型第三方api平台汇总 支持国内外各种大模型 持续更新中...
    查看>>
    OpenAll:Android打开组件新姿势【仅供用于学习了解ButterKnife框架基本原理】
    查看>>
    OpenASR 项目使用教程
    查看>>
    Openbox-桌面图标设置
    查看>>
    opencart出现no such file or dictionary
    查看>>
    OpenCV 3.1 imwrite()函数写入异常问题解决方法
    查看>>