? ? 今天在調(diào)試程序時(shí),發(fā)現(xiàn)在某一Activity上使用startActivityForResult時(shí),界面啟動(dòng)時(shí)就會(huì)調(diào)用該Activity的onActivityResult()方法凤薛。,并且收到一個(gè)RESULT_CANCELED的request code槐沼。用log調(diào)試半天阶冈,檢查了幾遍Java代碼,還是百思不得其解葫慎,問(wèn)題依然存在衔彻。后來(lái)想到Activity的LaunchMode是singleTask,去網(wǎng)上搜了下發(fā)現(xiàn)遇到這問(wèn)題的朋友還不少偷办,修改了Activity的LaunchMode為Standard之后onActivityResult()方法終于按照預(yù)想的邏輯執(zhí)行了艰额。
原因:
如果被開(kāi)啟的B和開(kāi)啟B的A 這兩個(gè)Activity不同時(shí)工作在一個(gè)task中,那么A的startActivityForResult就無(wú)法使用椒涯。
因?yàn)楸婚_(kāi)啟的B的LaunchMode是singleTask柄沮,在新建這個(gè)Activity時(shí),會(huì)把它放在一個(gè)新的stack中并置于頂部(即放在新的task中)废岂,和開(kāi)啟它的A就不在一個(gè)task中了祖搓,那么A中的startActivityForResult就不會(huì)按照我們預(yù)想的那樣執(zhí)行。
解決辦法:
(1).如果你的B的確需要用到single task的Launch Mode湖苞,并且B確實(shí)需要返回給A一些數(shù)據(jù)拯欧,那么嘗試在B中通過(guò)startActivity(Intent intent)重新開(kāi)啟A。只不過(guò)此時(shí)财骨,你已經(jīng)在intent里面添加了你想返回的數(shù)據(jù)了哈扮。
(2).可以試試用監(jiān)聽(tīng)廣播的方法纬纪。
總結(jié):
以后在選擇Activity的LaunchMode時(shí),要考慮onActivtyResult方法與之存在沖突滑肉。