Android填坑-Activity:startActivityForResult启动其他launchMode的Activity无效果

问题描述

使用startActivityForResult方法连续启动launchMode为singleTop、singleTask、singleInstance模式的Activity都没有出现相应的launch效果。出现的效果是:会打开多个待启动的Activity。而通过startActivity方法连续启动却是正常的。

可能出现的场景(startActivityForResult)

  1. 用户快速连续点击启动按钮;
  2. 待启动的Activity需要一定的启动时间(比如插件化开发模式),导致用户以为没有触发,再次点击了启动按钮;

原因分析

测试方案

<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=".SecondActivity"
    android:launchMode="singleInstance" />
复制代码

启动方式:

    public void startForResult(View view) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivityForResult(intent, 1);
            }
        }, 1000); // 1s延时主要是为了看启动效果
    }

    public void start(View view) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        }, 1000);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d(TAG, "onActivityResult: " + requestCode);
    }
复制代码

测试结果

startActivityForResult对singleTop、singleTask、singleInstance模式都表现为standard的效果。
查看栈信息:(以singleInstance为例)
startActivity一次:

startActivity多次:
startActivityForResult一次:
startActivityForResult多次:

结果分析

startActivityForResult在低版本(好像5.0之前)有个问题:startActivityForResult所启动的Activity如果是singleTask或者singleInstance的,会立马回调onActivityResult,返回cancel;高版本为了兼容singleTask和singleInstacne模式,把这两种模式都转成standard模式来处理了;所以启动效果就和standard模式一样。

解决方案

暂时没有想到怎么通过startActivityForResult方法启动单例模式的Activity,欢迎大神们解惑!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值