最近使用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 也不会导致立即返回。。。。。
浪费了几个小时记录下,,