今天在调试程序时,发现在某一Activity上使用startActivityForResult时,界面启动时就会调用该Activity的onActivityResult()方法。,并且收到一个RESULT_CANCELED的request code。用log调试半天,检查了几遍Java代码,还是百思不得其解,问题依然存在。后来想到Activity的LaunchMode是singleTask,去网上搜了下发现遇到这问题的朋友还不少,修改了Activity的LaunchMode为Standard之后onActivityResult()方法终于按照预想的逻辑执行了。
原因:
如果被开启的B和开启B的A 这两个Activity不同时工作在一个task中,那么A的startActivityForResult就无法使用。
因为被开启的B的LaunchMode是singleTask,在新建这个Activity时,会把它放在一个新的stack中并置于顶部(即放在新的task中),和开启它的A就不在一个task中了,那么A中的startActivityForResult就不会按照我们预想的那样执行。
解决办法:
(1).如果你的B的确需要用到single task的Launch Mode,并且B确实需要返回给A一些数据,那么尝试在B中通过startActivity(Intent intent)重新开启A。只不过此时,你已经在intent里面添加了你想返回的数据了。
(2).可以试试用监听广播的方法。
总结:
以后在选择Activity的LaunchMode时,要考虑onActivtyResult方法与之存在冲突。