注意坑 LaunchMode與StartActivityForResult

我們在開發過程中經常會用到StartActivityForResult方法啓動一個Activity,然後在onActivityResult()方法中可以接收到上個頁面的回傳值,但你有可能遇到過拿不到返回值的情況,那有可能是因爲Activity的LaunchMode設置爲了singleTask。5.0之後,android的LaunchMode與StartActivityForResult的關係發生了一些改變。兩個Activity,A和B,現在由A頁面跳轉到B頁面,看一下LaunchMode與StartActivityForResult之間的關係:

before5.0.png

after5.0.png

這是爲什麼呢?

這是因爲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做相關開發,不要忘了向下兼容,這裏有個坑請注意避讓。





作者:尹star
鏈接:http://www.jianshu.com/p/2a9fcf3c11e4
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章