處理運行時配置變化(當配置發生變化時系統會默認重啓Activity(先後執行onDestroy()和onCreate()),旨在通過以與新配置相匹配的備用資源自動加載適配應用)
當只需要保存簡單狀態對象時,可在onSaveInstanceState()時保存在Bundle 對象,在onCreate()或onRestoreInstanceState()時恢復對象狀態。
配置變化保存大型狀態對象一般有兩種處理方式:
1.配置變更期間保存狀態對象:利用fragment保存,步驟如下:
a)擴展Fragment類並聲明對狀態對象的引用
b)調用setRetainInstance(true),保存碎片
c)將碎片添加到activity,並設置要保存的狀態對象
d)重啓activity後使用fragmentManager檢索fragment 並取出保存的對象
注:不是所有對象都能保存,例如 drawable,adapter,view等一切與context相關的對象都不能保持,以免內存泄漏;
public class MyActivity extends Activity {
private RetainedFragment retainedFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// find the retained fragment on activity restarts
FragmentManager fm = getFragmentManager();
retainedFragment = (RetainedFragment) fm.findFragmentByTag(“data”);
// create the fragment and data the first time
if (retainedFragment == null) {
// add the fragment
retainedFragment = new RetainedFragment();
fm.beginTransaction().add(retainedFragment, “data”).commit();
// load the data from the web
retainedFragment.setData(loadMyData());
}
// the data is available in retainedFragment.getData()
...
}
@Override
public void onDestroy() {
super.onDestroy();
// store the data in the fragment
retainedFragment.setData(collectMyLoadedData());
}
}
2.自行處理變化