先直接貼出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 復原方法,這就是我的解決方法,如果有更好的,麻煩評論告訴我一下共同進步。