onNewIntentless
須要注意的是:spa
一、經過Intent啓到一個Activity的時候,就算已經存在一個相同的正在運行的Activity,系統也會建立一個新的Activity實例。爲了避免讓Activity實例化屢次,咱們須要經過在AndroidManifest.xml配置啓動方式。xml
二、launchMode爲singleTask的時候,經過Intent跳到一個Activity,若是系統已經存在一個實例,系統就會將請求發送到這個實例上,但這個時候----------系統就不會再調用onCreate方法,而是調用onNewIntent方法。內存
能用到的地方是A-->B-->C-->A,此時onActivityResult就有些複雜了。 例如:get
一、點擊 設置密碼(A),跳到 設置密碼頁面(B),輸入密碼;it
二、點擊完成 跳到 肯定密碼頁面(C),輸入密碼,設置成功後返回到設置頁面(A)並帶回一個狀態,此時(A)中的「設置密碼」變成「修改密碼」;後臺
三、用戶設置過密碼後,此頁面就變成了「修改密碼」的選項用戶體驗
四、C跳到A,這個A咱們要用之前棧中已有的,不能再去新建一個A的實例,因此須要在AndroidManifest.xml配置activity的啓動方式以實現單任務模式。每步的跳轉中,咱們不能finish掉上一步Activity,不然按返回鍵時,用戶體驗很差。。。。這時就須要onNewIntent了。固然這只是個人一個思路。配置
首先在AndroidManifest.xml配置activity的啓動方式以實現單任務模式請求
先看第二個SecondActivity,它須要把值傳到FirstActivity。
再來看FirstActivity
此時沒有走onCreat方法,可是爲了以防萬一,最好在onCreat方法裏也寫上操做,由於後臺運行的Activity可能在內存太高時被系統殺掉,這時就會走onCreat方法。
launchMode爲singleTask的時候,經過Intent啓到一個Activity,若是系統已經存在一個實例,系統就會將請求發送到這個實例上,但這個時候,系統就不會再調用一般狀況下咱們處理請求數據的onCreate方法,而是調用onNewIntent方法,以下所示:
protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent);//must store the new intent unless getIntent() will return the old one processExtraData(); }
不要忘記,系統可能會隨時殺掉後臺運行的Activity,若是這一切發生,那麼系統就會調用onCreate方法,而不調用onNewIntent方法,一個好的解決方法就是在onCreate和onNewIntent方法中調用同一個處理數據的方法,以下所示:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); processExtraData(); } protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent);//must store the new intent unless getIntent() will return the old one processExtraData() } private void processExtraData(){ Intent intent = getIntent(); //use the data received here }