基本生命周期
Activity之間跳轉(zhuǎn)
Activity中彈出AlertDialog
對Activity生命周期無任何影響。
Activity中彈出 style為Activity 的 Dialog
橫豎屏切換
適當(dāng)?shù)呐渲肁ctivity configChanges屬性可以控制橫豎屏切換時Activity是否銷毀重建。
如果應(yīng)用在特定配置變更期間無需更新資源苔货,并且因性能限制您需要盡量避免重啟厕妖,則可聲明 Activity 將自行處理配置變更沪蓬,這樣可以阻止系統(tǒng)重啟 Activity揭芍。
具體可參考 參考文檔->官方文檔->自行處理配置變更部分眨唬。
- 未配置Activity configChanges 屬性 :
- Activity configChanges = orientation :
API10:
API23:
- Activity configChanges = orientation|keyboardHidden :
API10:
API23:
API13及以上幻件,以上配置拨黔,在切換橫豎屏?xí)rActivity會銷毀重建。
- Activity configChanges = orientation|screenSize :
API10:
API13以下绰沥,Activity始終會自行處理screenSize配置的變更篱蝇。
API23:
API13及以上,當(dāng)設(shè)備在縱向和橫向之間切換時揪利,“屏幕尺寸”也會發(fā)生變化态兴,在configChanges屬性中增加screenSize可以避免Activity被銷毀重建。
- Activity configChanges = locale|layoutDirection:
隨手一記
在不退出應(yīng)用的情況下切換語言疟位,Activity未銷毀重建瞻润。
總結(jié)
綜上所述,在設(shè)備進(jìn)行橫豎屏切換時,分為如下幾種情況:
- 如果不手動配置Activity configChanges屬性绍撞,系統(tǒng)默認(rèn)對Activity進(jìn)行銷毀重建操作正勒。
- API13以下,Activity configChanges屬性中含有orientation即可避免Activity銷毀重建傻铣。
- API13及以上章贞,Activity configChanges屬性中同時含有orientation和screenSize即可避免Activity銷毀重建。
疑問
keyboardHidden屬性:
開發(fā)文檔上對這個屬性的解釋是鍵盤的可達(dá)性發(fā)生變化(我就這么翻譯怎樣)非洲,如顯示鍵盤等操作鸭限。
但在現(xiàn)有的許多博客中,大多數(shù)人喜歡把keyboardHidden和orientation聯(lián)合起來使用两踏。上文也對這種情況進(jìn)行了測試败京,Activity configChanges = orientation|keyboardHidden 部分。
在API13以上及以下我都進(jìn)行了測試梦染,發(fā)現(xiàn)keyboardHidden不會影響橫豎屏切換時Activity的銷毀重建操作赡麦,即銷毀重建操作仍然只被上文所述的orientation與screenSize影響。
即帕识,系統(tǒng)默認(rèn)對keyboardHidden配置的處理并非銷毀重建Activity泛粹。
所以,如果只是為了控制切換橫豎屏?xí)rActivity是否銷毀重建肮疗,自行處理keyboardHidden配置是沒有必要的晶姊。
other
獲取橫豎屏切換狀態(tài)部分代碼:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
switch (newConfig.orientation) {
case Configuration.ORIENTATION_PORTRAIT://豎屏
Log.i(TAG, "豎屏");
// setContentView(R.layout.XXX);
break;
case Configuration.ORIENTATION_LANDSCAPE://橫屏
Log.i(TAG, "橫屏");
// setContentView(R.layout.XXX);
default:
break;
}
}
備注
API10
測試機(jī)型: HTC Z710e
Android版本: 2.3.4
API23
測試機(jī)型: One Plus 3
Android版本: 6.0.1