運行時配置變化 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.自行處理變化

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