运行时配置变化 Android developer fight-3

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章