這 幾天有個需求就是把自己的應用程式要設置為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
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()