免费网站建设新技术,美的网站建设规划书,东源县住房和城乡建设部网站,微信网站模块ActivityRecord、TaskRecord、ActivityStack区别 ActivityRecord对应着一个Activity实例#xff0c;保存了Activity所有相关信息 TaskRecord指的是一个任务栈#xff0c;里面包含多个ActivityRecord ActivityStack用于管理TaskRecord
五种启动模式
Standard模式 默认的启…ActivityRecord、TaskRecord、ActivityStack区别 ActivityRecord对应着一个Activity实例保存了Activity所有相关信息 TaskRecord指的是一个任务栈里面包含多个ActivityRecord ActivityStack用于管理TaskRecord
五种启动模式
Standard模式 默认的启动模式每次启动都会创建新的Activity运行在启动它的任务栈里 taskAffinity对其无效
SingleTop模式 如果当前任务栈顶部已经有一个Activity了则不会重新创建调用它的onNewIntent方法 例如用于展示通知消息内容的Activity设置为SingleTop如果当前已经在展示通知消息界面了则不会重新创建而是调用onNewIntent去更新界面内容 taskAffinity对其无效
SingleTask模式 启动时会先检查taskAffinity是否和当前任务栈一致(默认是包名)如果不一致会检查是否有同名的任务栈如果没有就会创建一个新的与taskAffinity同名的任务栈再创建Activity如果配置的任务栈中已经存在该Activity则不重新创建而是调用onNewIntent并且它上层的Activity会都被清空 taskAffinity:只能运行在它配置的任务栈中 同时默认带Intent.FLAG_ACTIVITY_SINGLE_TOP和## Intent.FLAG_ACTIVITY_NEW_TASK效果
SingleInstance模式 全局只有一个Activity实例独占一个任务栈其他Activity不能进入它所在任务栈当重新启动该Activity时回调onNewIntent方法 配置taskAffinity和Intent.FLAG_ACTIVITY_SINGLE_TOP和## Intent.FLAG_ACTIVITY_NEW_TASK对它都没什么意义因为它总是独占一个任务栈并且全局唯一
SingleInstancePerTask模式 Android 12新增同时拥有SingleInstance和SingleTask部分特性 只能作为任务栈的根Activity、作为创建该任务栈的第一个Activity运行 每个任务栈最多仅有一个实例 如果当前任务栈没有该Activity实例则会像SingleInstance一样在新的任务栈启动该Activity 如果当前任务栈已经有该Activity实例则不会重新创建并会像SingleTask那样清空它上面的Activity 如果配合Intent.FLAG_ACTIVITY_MULTIPLE_TASK或者FLAG_ACTIVITY_NEW_DOCUMENT启动时就算当前任务栈已经有该Activity实例了每次都会在新的任务栈中创建Activity实例 Intent.FLAG_ACTIVITY_NEW_TASK和taskAffinity对这个启动模式没有意义因为它必须在当前任务栈启动的第一个Activity所以当前任务栈一定跟它的taskAffinity一致所以加上或者不加上Intent.FLAG_ACTIVITY_NEW_TASK都会复用当前任务栈中的实例 适用于需要在独立的任务栈启动并且拥有SingleTask特性的Activity
taskAffinity 用于指定Activity所在的任务栈 需要配合Intent.FLAG_ACTIVITY_NEW_TASK使用在启动时会检查是否已经存在taskAffinity同名的任务栈不存在则会创建 仅对SingleTask有效
allowTaskReparenting 与taskAffinity配合使用当Activity检测到自己需要的任务栈已经创建则会移动到taskAffinity指定的任务栈中去 使用场景当AppA启动AppB的ActivityA时ActivityA是先存在于AppA任务栈中的当AppB启动时ActivityA发现它原本需要的任务栈已经创建则会移动到AppB任务栈中所以我们会看到AppB启动时看到的不是主界面而是ActivityA界面
其他 Android 12 以前当我们处于 Root Activity 时点击返回键时应用返回桌面 Activity 执行 onDestroy程序结束。 Android 12 起同样场景下 Activity 只会 onStop不再执行 onDestroy。 如果默认启动的Activity设置启动模式为SingleTask或者SingleInstance打开app进入第二个界面返回桌面重新回到app显示的是主界面而不是回到桌面前的第二个界面SingleTask模式是因为启动时会清空上层Activity而SingleInstance独占一个任务栈二级界面所在任务栈被切换都后台了 在cmd下运行 adb shell dumpsys activity 查看Activity栈信息 启动模式对应的Int值 public class ActivityInfo extends ComponentInfo implements Parcelable {public static final int LAUNCH_MULTIPLE 0;public static final int LAUNCH_SINGLE_TOP 1;public static final int LAUNCH_SINGLE_TASK 2;public static final int LAUNCH_SINGLE_INSTANCE 3;public static final int LAUNCH_SINGLE_INSTANCE_PER_TASK 4;