设置方式:
清单文件设置:android:launchMode=“singleTop”
启动设置flag :intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
onStandard
标准模式:常规的 一个叠一个
A-B-C-B-C
SingleTop
栈顶复用:栈顶只保留一个同样的页面, 阅读的页面 反复复用,im的对话页面ti
A-B。再开B 会复用,开A会是 ABA
SingleTask
栈内复用:主页 唯一,能回退
ABC 此时开B ,C会被移除
SingleInstance
独立栈:比如通话/分享页面唯一的,webview
//原文
standard:每次启动一个Activity时,都会创建一个新的实例,并放置在任务的顶部。
singleTop:如果新Activity已经位于任务的顶部,那么不会创建新的实例,而是复用现有的Activity实例。
singleTask:任务栈中只能有一个Activity的实例。如果要启动的Activity已经存在于任务栈中,那么系统会将此Activity移至任务的顶部,并复用它。
singleInstance:这是一种非常特殊的启动模式,它会为Activity创建一个新的任务栈,并且这个任务栈中只能有这一个实例。这种模式通常用于多个应用共享一个Activity的场景。
58问过怎么自己实现SingleTop相似逻辑: 自己维护一个AppManager,在application注册生命周期 监听,记录和维护,也可以判断是否为前后台,进行处理。
application.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
AppManager.addActivity(activity);
}
@Override
public void onActivityStarted(Activity activity) {
AppBackgroundUtil.addFrontAct();
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
AppBackgroundUtil.reduceFontAct();
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
AppManager.getAppManager().removeActivity(activity);
}
});