关于Activity singleInstance 启动模式

网上流传的信息:singleInstance适合需要与程序分离的页面,例如闹铃提醒,将闹铃提醒与闹铃设置分离,singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如;A->B(singleInstance)->C,完全退出后,再次启动,首先打开的是B.

google 了一下Activity 的启动模式,排名前几个的内容几乎是一模一样的,其他的没什么说的,但是这个 A->B->C 完全退出之后再次打开是B,让人很费解。想不明白为什么,启动app 不去找我设置的launchActivity而去打开别的,这不科学。

B 是singletask 模式,它自己一个栈,而且最后打开的是C,所以B 的任务栈将处于后台,退出有两种:一种是直接杀死进程,那么 前台后台任务栈都会被销毁,重新启动打开后是A;第二种是回退键,一个一个回退,C->A->B,再次打开之后仍然是A。

app 启动过程,手机开机的时候会读取所有应用程序的manifest,然后将manifest 的信息注册进系统里面,当你打开app 的时候会根据包名去匹配对应的app, 启动 标志为 launch 的activity,所以杀掉进程重启只能是A。

要想直接到B 只能是 退出C->A 不退出B,按home键 再回来,这跟"完全退出后,再次启动,首先打开的是B"的说法明显相差甚远!

但是作为中间件 B 是有问题的,因为回退的时候是C->A->B,这是不可接受的。

测试相关代码:

      <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".BActivity"
            android:launchMode="singleInstance" />
        <activity android:name=".CActivity"></activity>

 main->B->C

 findViewById(R.id.tv_click).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, BActivity.class));
            }
        });
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);
        startActivity(new Intent(this, CActivity.class));
        //finish() 无论是否调用finish 都是一个结果
    }

测试:Android 7.0 魅族

结果:1.没出现 A->B(singleInstance )->C 完全退出之后 再打开程序直接到->B

2.singleInstance 不能作为中间件

3.Activity 的任务栈->别名:回退栈

以上是个人测试的结果:不知道那些流传很高的结果是怎么产生的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值