標籤:
這幾天有個需求就是把自己的應用程式要設定為Launcher的形式,設定後onCreate就會啟動倆次,在網上找了資料後說是橫豎屏設定造成的先說結果:在MainAcitivity裡設定android:configChanges="mcc|mnc"就能解決問題的。
今天在看log的時候發現,Launcher activity會被onDestroy掉一次,然後再重啟。
可能原因猜測:
1.橫豎屏切換
2.MCC MNC等Configuration改變引起的 MCC(移動國家碼)和 MNC(移動網路碼)
由於當時的Launcher設定為強制橫屏了,應該是不會引起重啟的。
對於Configuration改變系統會發一個android.intent.action.CONFIGURATION_CHANGED的廣播
於是就做了一個廣播接收器去檢測是不是由於Configuration改變引起的(後來發現Launcher本身有監聽這個廣播)
果然發現MCC值由0(未定義)變為460(中國)
原因已經初步確定了,怎麼才能讓activity不重啟呢?
既然是activity重啟,那就先去看一下activity有什麼屬性可以防止重啟....
運氣實在是好,剛好有這麼個屬性:
android:configChanges=["mcc", "mnc", "locale", "touchscreen", "keyboard", "keyboardHidden", "navigation", "screenLayout", "fontScale", "uiMode", "orientation", "screenSize", "smallestScreenSize"]
官方的解釋是這樣的:
Lists configuration changes that the activity will handle itself. When a configuration change occurs at runtime, the activity is shut down and restarted by default, but declaring a configuration with this attribute will prevent the activity from being restarted. Instead, the activity remains running and itsonConfigurationChanged() method is called.
大致意思也就是說:
那些被列舉的屬性configuration改變時activity是否儲存自己的狀態。當應用發生了configuration改變,預設情況下activity將關閉並重啟自身,但是如果定義了這個屬性,activity將不必重啟,它將保持運行狀態同時調用onConfigurationChanged()方法。也就是說當不配置android:configChanges="mcc|mnc"時,當mcc或mnc的值發生改變的時候,會重啟activity,並且onConfigurationChanged()不會被調用
果然配置了這個屬性後Launcher Activity就不會在開機時候啟動兩次了。
以上方法我測試過是可行的。
資料來源於:http://www.th7.cn/Program/Android/201408/263797.shtml
Android應用設定為Launcher時onCreate啟動倆次的問題