最近使用StartActivityforResult 的時候遇到一個奇怪的現(xiàn)象,即用Activity A 去StartActivityforResult? Activity B的時候 ActivityB 不執(zhí)行直接返回到了 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+"http://"+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已經(jīng)創(chuàng)建");ButterKnife.bind(this);}@OnClick(R.id.back)public voidback(View v){? ? ? ? Log.e("XXX","返回上級activity");//? ? ? ? TestActivity.this.setResult(110);TestActivity.this.finish();}}
點擊A 的跳轉按鈕得到如圖日志
可見B 還未被創(chuàng)建
onActivityResult就被返回了
查閱源碼注釋有:
關鍵這里:
if the activity you are launching uses the when you expect ........
翻譯:
如果你使用了 singleTask 加載模式 該方法會立即返回 并接受到一個 取消的返回碼。 ?然后前面還有個 In other protocols
(在其他協(xié)議下,具體什么鬼 我也不明白 ,望知道的大佬指點一二)
我這里的B 在mainfest 中 故意添加了 single Task 方便演示
去掉該launchMode后的log
以上這些 其他博客里都有介紹,,,然后重點來了,,,麻痹的,,
經(jīng)過測試這個立即返回的問題只出現(xiàn)在5.1之前的android 版本上,意思是說在 6.0 上 你就是寫了singleTask 也不會導致立即返回。。。。。
浪費了幾個小時記錄下,,