关于StartActivityforResult 的一点记录

本文探讨了在特定Android版本及启动模式下,StartActivityforResult出现的异常行为,即Activity B未执行就直接返回到了Activity A的onActivityResult方法。通过调整Activity B的启动模式,验证了此现象仅出现在5.1之前的Android版本。
摘要由CSDN通过智能技术生成

最近使用StartActivityforResult 的时候遇到一个奇怪的现象,即用Activity A 去StartActivityforResult  Activity B的时候 ActivityB 不执行直接返回到了 Activity A的 onActivityResult 方法。

Activity A:

public class MainActivity extends Activity {
    static String TAG=MainActivity.class.getSimpleName();
    @BindView(R.id.jump_test)
    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView =(TextView)findViewById(R.id.test);
        textView.setOnClickListener(v -> Toast.makeText(this, "this", Toast.LENGTH_SHORT).show());
        ButterKnife.bind(this);
//        startActivity();
    }
    @OnClick(R.id.jump_test)
    public void onClik(View v) {
        Intent intent =new Intent(this,TestActivity.class);
        startActivityForResult(intent,100);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==100){
            Log.e(TAG,"返回码"+requestCode+"//"+resultCode);
        }
    }
}

Acitvity B:


public class TestActivity extends Activity {
    @BindView(R.id.back)
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        Log.e("XXX","test已经创建");
        ButterKnife.bind(this);


    }
    @OnClick(R.id.back)
    public void back(View v){
        Log.e("XXX","返回上级activity");
//        TestActivity.this.setResult(110);
        TestActivity.this.finish();
    }


}

点击A 的跳转按钮得到如图日志


可见B 还未被创建

onActivityResult就被返回了

查阅源码注释有:


关键这里:

if the activity you are launching uses the when you expect ........  

翻译:

如果你使用了 singleTask 加载模式 该方法会立即返回 并接受到一个 取消的返回码。  然后前面还有个 In other protocols

(在其他协议下,具体什么鬼 我也不明白 ,望知道的大佬指点一二)

我这里的B 在mainfest 中 故意添加了 single Task 方便演示


去掉该launchMode后的log


以上这些 其他博客里都有介绍,,,然后重点来了,,,麻痹的,,

经过测试这个立即返回的问题只出现在5.1之前的android 版本上,意思是说在 6.0 上 你就是写了singleTask 也不会导致立即返回。。。。。

浪费了几个小时记录下,,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值