Android 重啓Acticity以及重啓後的生命週期變化

先直接貼出chon重啓的代碼:

Intent intentReStrat = getIntent();
finish();
startActivity(intentReStrat);

代碼就這麼簡單實際上就這三行,可是當我們實際用的時候會發現有一些不對勁,比如果我在onDestory等生命週期做了什麼的時候,所以我們在每個生命週期打上Log看一下

LogUtil.chunyLog().d("onCreat"+ this);

在Activity的每個生命週期都有這個log(後面加this是爲了看不同的Activity,因爲重啓是有新生成新的和銷燬上一個兩個步驟的)

OK,剩下的就是弄一個按鈕在點擊事件裏把最開始的重啓代碼寫上去

加些來運行。。。

先會出現如下情況:

可以看到先是走了onCreat  onStart onResume  這些不用說了,houm後面我們看到

@1ecbcf6f  這個就是這個Activity特有的

 

接下來點擊按鈕,重啓Acticity:

接下來就要認真看一下了,我們爲了方便把前面的Activity(@1ecbcf6f ) 說成Aty1  

把後來新建的@2005b14f  dang當成新的Aty2   這樣就好理解了

OK,接下來複原一下發生了什麼

當我們點擊按鈕之後,Aty1走了onPause 先暫停了

然後Aty2 走了 onCreat onStart onResume 三個創建成功

加下來Aty1  走了onStop  onDestory 被殺死了

可以看到當新的Aty創建後還走了上一個Aty的onStop 和onDestory  這裏就會出現一點we

 

問題了,每個情況不一樣,我的是因爲綁定Service了,

在onDestory裏面 調用了Service裏面一個恢復默認的方法 ,這樣就會造成一個問題,當我重啓Aty之後在後調用的是上一個Aty的onDestory 恢復默認了就會變成重啓Aty後沒有執行一進來做的事情,所以不對

 

解決方法:

每個人的解決方法不一樣,我的是用SP,在點擊按鈕的時候把存SP裏面的boolean變量(叫asd把)存成true

然後在調用Service方法那裏 就是onDestory 取出asd , 如果是true就不調用Service方法,並且把asd賦值false

然後else裏面執行退出的方法,這樣我們可以模擬一下

 

一進來Aty直接退出的時候asd是false(默認)所以走else 直接退出調用Service退出方法復原,如果是點擊按鈕了,就是先把

asd存成true  然後就沒有走service 復原方法,這就是我的解決方法,如果有更好的,麻煩評論告訴我一下共同進步。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章