有時候APP的狀態(tài)會發(fā)生改變,從而導(dǎo)致我們丟失一些數(shù)據(jù)和信息。比如Activity在onDestroy方法之后會丟失activity實例中所引用的信息,而我們又想保存這些信息,比如在EditText中的text、ListView中的Scroll position.
在這種情況下,最好的想法就是調(diào)用想用的onSaveInstanceState方法,比如Activity、View下得onSaveInstanceState()方法保存想要保存的信息,他可以使得相應(yīng)的實例在銷毀之后依舊保存相關(guān)的數(shù)據(jù)信息,在實例恢復(fù)時可以載入已保存的數(shù)據(jù)信息。
對于調(diào)用了onSaveInstanceState()方法的情況,可以使用onRestoreInstanceState()方法從bundle中恢復(fù)獲得在onSaveInstanceState()方法中保存的數(shù)據(jù)信息。
對于Activity, 如果不希望因為橫豎屏切換從而造成Activity實例重載,造成數(shù)據(jù)丟失的話,可以使用android:screenOrientation屬性固定Activity的顯示模式。之后,在橫豎屏切換時,Activity將不會銷毀,重新創(chuàng)建實例,也就不會因此原因從而造成Activity數(shù)據(jù)的丟失。
在Activity下,還有一種方法可以應(yīng)對這樣的Configuration changes。 通過在android:configChanges 中設(shè)定相應(yīng)的屬性,從而使得該Activity在面對這些屬性時,不會restart,而是調(diào)用onConfigurationChanged()方法。 ? 但是這種應(yīng)對Configuration changes的方法是不推薦的。