activity的启动模式和使用场景

设置方式:
清单文件设置: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);
            }
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值