android:taskAffinity與android:finishOnTaskLaunch之我見


  最近做一個打電話相關的小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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM