美文网首页
AMS内核笔记

AMS内核笔记

作者: 浩林Leon | 来源:发表于2017-12-30 15:54 被阅读13次

    ActivityManagerService 简称AMS:

    AMS的总体结构图


    image.png

    主要负责Acitivity 的管理:
    包括 :

    • 1、对Activity 和系统之间的调度统一管理,
    • 2、对activity运行的相关信息管理(Task,memory,Service)
    • 3、进程管理

    里面主要有3大数据

    • ProcessRecord :
    • StackRecord
    • ActivityRecord

    Activity调度的思路 :
    A→B: AMS先会去暂停当前的Activity ,直到pauseComplete,检查B是否在历史栈中(由ActivityRecord 对象负责),如果在的话说明只需要 onResume,如果不在的话进行start

    Activity 的4种启动模式 :

    ActivityStackSupervisor ::startActivityUncheckedLocked 里面具体执行
    1、检测launchFlags,
    2、检测launchTaskBehind,确保 (!launchSingleTask && !launchSingleInstance)
    3、如果是 :FLAG_ACTIVITY_NEW_TASK,无论如何都会启动一个新的TASK
    4、检测Task 是否在栈顶
    5、检查非Activity 启动 的任务(检测context,和flag)
    6、对于singleTop(栈顶只有一个实例),只要栈顶不是要启动任务,都会创建一个新的,加入到栈顶;如果栈顶已经存在任务,则调用onNewIntent();
    7、对于 SingleTask,表示在在内存共享一个实例,如果实例存在栈,调用了该对象,会执行onNewIntent(),并且实例置顶。
    8、对于SingleInstance,有可能独占一个栈,在内存共享一个实例,无论实例在某一个栈中,只要有激活,就会进入该栈的实例,置顶。其他的task 与他不在同一个栈中,

    LaunchMode 可以有Intent Activity 启动标志替代

    1:FLAG_ACTIVITY_NEW_TASK
    taskAffinity:每一个Activity都可以配置一个taskAffinity,如果配置文件里面没有配置,则系统默认用App的包名作为值。

    image.png
    image.png

    We have a conflict between the Intent and the Activity manifest, manifest wins.
    如果Intent 的flag 和 manifest launchmode 有冲突,则用manifest中的。

    如果affinity值 相同,会压到相同栈中,否则新开辟一个栈。
    2:FLAG_ACTIVITY_SINGLE_TOP: ===== singleTop
    FLAG_ACTIVITY_CLEAR_TOP会清空实例栈顶的实例,进入onNewIntent 一般与FLAG_ACTIVITY_NEW_TASK配合使用。
    4.FLAG_SINGLE_TASK需要注意:
    对于在App内部的 ActivityA-→ActivityB (singleTask)-→ActivityC
    1.默认情况下,ActivityB 是不会新开一个栈,和ActivityA保持同一个栈,因为默认情况下所有的Activity 的TaskAffinity值都是想同的,都是包名.
    2.设置了ActivityB的TaskAffinity值和包名不一致,才会新开一个栈.
    3.两个不同app的TaskAffinity值相同,他们的SingleTask的Activity会在同一个栈.
    Single_Task在同任务中具有唯一性.
    5.Single_Instance:
    1.被其他任何Activity 开启都会新开辟一个栈.
    2.被singleInstance开启的Activity 如果是TaskAffinity 和singleInstance的一致则在同一个栈,如果不一致则新开栈.

    相关文章

      网友评论

          本文标题:AMS内核笔记

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