最近使用StartActivityforResult 的时候遇到一个奇怪的现象,即用Activity A 去StartActivityforResult Activity B的时候 ActivityB 不执行直接返回到了 Activity A的 onActivityResult 方法。
Activity A:
public classMainActivityextendsActivity {staticStringTAG=MainActivity.class.getSimpleName();@BindView(R.id.jump_test) Buttonbutton;@Overrideprotected voidonCreate(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 voidonClik(View v) { Intent intent =newIntent(this,TestActivity.class);startActivityForResult(intent,100);}@Overrideprotected voidonActivityResult(intrequestCode, intresultCode,Intent data) {super.onActivityResult(requestCode,resultCode,data);if(requestCode==100){ Log.e(TAG,"返回码"+requestCode+"//"+resultCode);} }}
Acitvity B:
public classTestActivityextendsActivity {@BindView(R.id.back) Buttonbutton;@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test);Log.e("XXX","test已经创建");ButterKnife.bind(this);}@OnClick(R.id.back)public voidback(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 也不会导致立即返回。。。。。
浪费了几个小时记录下,,
网友评论