在開發過程中經常會用到StartActivityForResult方法啓動一個Activity,然後在onActivityResult()方法中可以接收到上個頁面的回傳值
但你有可能遇到過拿不到返回值的情況,那有可能是因爲Activity的LaunchMode設置爲了singleTask。
5.0之後,android的LaunchMode與StartActivityForResult的關係發生了一些改變。兩個Activity,A和B,現在由A頁面跳轉到B頁面,看一下LaunchMode與StartActivityForResult之間的關係:
原因:
這是因爲ActivityStackSupervisor類中的startActivityUncheckedLocked方法在5.0中進行了修改。在5.0之前,當啓動一個Activity時,系統將首先檢查Activity的launchMode,如果爲A頁面設置爲SingleInstance或者B頁面設置爲singleTask或者singleInstance,則會在LaunchFlags中加入FLAG_ACTIVITY_NEW_TASK標誌,而如果含有FLAG_ACTIVITY_NEW_TASK標誌的話,onActivityResult將會立即接收到一個cancle的信息,而5.0之後這個方法做了修改,修改之後即便啓動的頁面設置launchMode爲singleTask或singleInstance,onActivityResult依舊可以正常工作,也就是說無論設置哪種啓動方式,StartActivityForResult和onActivityResult()這一組合都是有效的。所以如果你目前正好基於5.0做相關開發,不要忘了向下兼容,這裏有個坑請注意避讓。