处理运行时配置变化(当配置发生变化时系统会默认重启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.自行处理变化