啟動模式
standard singleTop singleTask singleInstance
什麽時候該用哪種模式? final類無法被繼承,沒有子類
*standard:系統默認啟動模式
Android是使用返回棧來管理Activity的,在standard模式下,每當啟動一個新的活動,它就會在返回棧中入棧,並處於棧頂的位置。
對於使用standard模式的活動,系統不會在乎這個活動是否已經在返回棧中存在,而是每次啟動活動都會創建該活動的一個新的實例。
*singleTop:
在啟動Activity時,如果發現該返回棧的棧頂已經是該Activity時,則認為可以直接使用它,不會在創建新的Activity實例
singleTop適合接收通知啟動的內容顯示頁面。
*singleTask:
每次啟動該Activity時,首先會在返回棧中檢查是否存在該Activity的實例,如果發現已經存在就直接使用該實例,
並把這個Activity之上的所有活動統統出棧,如果沒有發現就會創建一個新的Activity實例。
singleTask適合作為程序入口點。例如瀏覽器的主界面。不管從多少個應用啟動瀏覽器,只會啟動主界面一次,
其余情況都會走onNewIntent,並且會清空主界面上面的其他頁面。之前打開過的頁面,打開之前的頁面就ok,不再新建。
(如果在棧中已經有該Activity的實例,就重用該實例(會調用實例的onNewIntent())。)
onNewIntent:Activity第一啟動的時候執行onCreate()---->onStart()---->onResume()等後續生命周期函數,
第一次啟動Activity並不會執行到onNewIntent(). 而後面如果再有想啟動Activity的時候,
那就是執行onNewIntent()---->onResart()------>onStart()----->onResume().
如果android系統由於內存不足把已存在Activity釋放掉了,那麽再次調用的時候會重新啟動Activity即執行onCreate()---->onStart()---->onResume()等。
當調用到onNewIntent(intent)的時候,需要在onNewIntent() 中使用setIntent(intent)賦值給Activity的Intent.否則,後續的getIntent()都是得到老的Intent。
launchMode為singleTask的時候,通過Intent啟到一個Activity,如果系統已經存在一個實例,系統就會將請求發送到這個實例上,
但這個時候,系統就不會再調用通常情況下我們處理請求數據的onCreate方法,而是調用onNewIntent方法
系統可能會隨時殺掉後臺運行的Activity,如果這一切發生,那麽系統就會調用onCreate方法,而不調用onNewIntent方法,
一個好的解決方法就是在onCreate和onNewIntent方法中調用同一個處理數據的方法
*singleInstance:
指定為singleInstance模式的Activity會啟用一個新的返回棧來管理這個Activity,
不管是哪個應用程序來訪問這個Activity,都共用同一個返回棧,解決了共享Activity實例的問題
singleInstance適合需要與程序分離開的頁面。
線程池: executorService
ThreadPoolExecutor
可緩存線程池CachedThreadPool
定長線程池FixedThreadPool
SingleThreadPool mFixedThreadPool = Executors.newSingleThreadPool();
ScheduledThreadPool
啟動模式