最近做一個打電話相關的小app,用到了2個平時了解得少的屬性,也是看到一個國外相同項目這個做的,開始是直接復制過來的,沒去詳細了解,項目中期時,隨手刪了2行配置的屬性,由於平時基本沒用到,所以以為用處不大,結果出了寫小問題,這里記錄一下。不廢話了,直接貼代碼和解釋吧,以下是我測試后的個人理解。
<activity android:name=".callscreen.CallScreenActivity" android:taskAffinity="com.mythlink.callapp.callScreen"/> <!-- android:taskAffinity重新分配一個[task]任務名稱(其它activity也可使用該名稱) [ps:因為有些項目需求是,點擊應用圖標必須顯示項目主界面,有這個屬性就很好辦了,把其它activity重新分配一下taskAffinity, 這樣就不會顯示這些界面了,因為默認的taskAffinity棧頂不是這些activity]。 如果不需要執行activity中的onNewIntent方法,最好是使用android:finishOnTaskLaunch="true",這樣更好。 --> <activity android:name=".settings.ContactSettingActivity" android:finishOnTaskLaunch="true"/> <!-- android:finishOnTaskLaunch="true"在配置了該屬性為true的activity中按home鍵返回到[home screen]屏幕后,再點擊該應用的圖標啟動程序時, 則系統會調用該activity的[onDestroy]銷毀。因為點擊應用的圖標啟動程序時,重新啟動了這個任務。 [ps:因為有些項目需求是,點擊應用圖標必須顯示項目的主界面且銷毀某些之前打開的界面]。暫時還不會重新啟動自己分配的[taskAffinity]任務, 所以只能使用默認系統的taskAffinity,然后點擊應用圖標啟動程序進行觸發 。 -->
注意:
以上2個activity不在同一個task中,如果先打開CallScreenActivity再打開ContactSettingActivity,這時當ContactSettingActivity執行onDestroy后,會返回到跟它相同taskAffinity的activity中,而不是返回到CallScreenActivity界面,只有在這個taskAffinity的棧中沒有任何activity時,才會再次返回到上一個taskAffinity中的相應activity界面。
如果把2個activity都配置為android:launchMode="singleInstance"模式,那么它們都不受task管理,也就是說配置android:finishOnTaskLaunch是無效的。配置android:taskAffinity在這里也失效一部分功能,目前知道它還保留有的功能:就是配置android:excludeFromRecents="true"后,在不同的task中不受影響,且還具備相同的task系統默認返回棧頂activity。
如果啟動模式為singleInstance,那么onActivityResult將會失去作用,它的resultCode會直接返回Activity.RESULT_CANCELED。
