Android onSaveInstanceStateリアルタイム保存データ——侮れない

3095 ワード

データの保存、きっとみんなはすべてよく知らないで、今日何気なく1篇の博文を見て、ActivityのonSaveInstanceState方法に対して1つの新しい認識があって、特にここで記録して、後で調べるためです.
携帯電話のメモリが使えば使うほど小さくなり、メモリが足りないときにアプリの中でスタックの上にないactivityを回収する可能性が高いことはよく知られています.開発中、このような問題に遭遇したことがありますか?Aを開きました.Aは登録クラスactivityです.それからあなたはたくさんの情報を記入した後、デスクトップに戻ってメールを見たり、電話に出たりして、あなたがこれを開けたとき、中に記入したものがなくなったことに気づきました.この時、この開発者を拍手して死にたいですか?
どうしようかな?onSaveInstancesStateの使用を理解して、あなたのために便利に解決することができて、くだらない話は多く言わないで、以下の紹介を見てください:
onsaveinstancestate()コールバックメソッドは、activityが回収される前に必ず呼び出されることを保証します.
一、保存したいデータを保存する
 @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
        String string = "activity          ?";
        outState.putString("Activity", string);
    }

二、欲しいデータは保存されていますが、どうやって復元しますか?oncreate()メソッドでこのデータを復元します.保存用はbundleなので、取り出した操作はもうわかっているでしょう.
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState != null) {
            String oldString = savedInstanceState.getString("Activity");
        }
        
    }

開発中のテンプレートコード:
@Override
protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(KEY_BOTTOM_NAVIGATION_VIEW_SELECTED_ID, bottomNavigationView.getSelectedItemId());
        FragmentManager fragmentManager = getSupportFragmentManager();
        if (timelineFragment.isAdded()) {
            fragmentManager.putFragment(outState, TimelineFragment.class.getSimpleName(), timelineFragment);
        }
        if (categoriesFragment.isAdded()) {
            fragmentManager.putFragment(outState, CategoriesFragment.class.getSimpleName(), categoriesFragment);
        }
        if (aboutFragment.isAdded()) {
            fragmentManager.putFragment(outState, AboutFragment.class.getSimpleName(), aboutFragment);
        }
    }
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();   
        initFragments(savedInstanceState);
        if (savedInstanceState != null) {
            int selectId = savedInstanceState.getInt(KEY_BOTTOM_NAVIGATION_VIEW_SELECTED_ID);
            switch (selectId) {
                case R.id.nav_timeline:
                    showFragment(timelineFragment);
                    break;

                case R.id.nav_categories:
                    showFragment(categoriesFragment);
                    break;

                case R.id.nav_about:
                    showFragment(aboutFragment);
                default:
                    break;
            }
        } else {
            showFragment(timelineFragment);
        }

    }

三、まとめ
savedInstanceStateパラメータが空かどうかによって、空であれば保存操作をしていないことを説明し、空でなければ保存したデータを取り出します.また、この方法ではオブジェクトを保存することもできます.