Android 变量状态保留

170 阅读1分钟

假如MainActivity如下

public class MainActivity extends Activity {
    private int mCurrentIndex = 0;
    private static final String KEY_INDEX = "index";
    
    // 重新加载后,mCurrentIndex为零
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mCurrentIndex += 10; // 二次加载后,为10
    }
}

当屏幕翻转的时候activity将会重新开启一轮生命周期:
此时 mCurrentIndex 也会被重置,变成 0

那么为了保存这个变量,可以覆写 onSaveInstanceState 方法:

public class MainActivity extends Activity {
    private int mCurrentIndex = 0;
    private static final String KEY_INDEX = "index";
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 从保存的变量中获取该键值对中的值。
        if(savedInstanceState !=null){
            mCurrentIndex = savedInstanceState.getInt(KEY_INDEX,0);
        }
        mCurrentIndex += 10; //二次加载后,为20
    }
    
    // 状态保留,在开启下一个生命周期之前保留状态
    @Override
    protected void onSaveInstanceState(@NonNull Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        // 通过使用 putInt方法 来保存这个变量,以键值对的方式存储
        savedInstanceState.putInt(KEY_INDEX, mCurrentIndex);
    }
}

相关内容可以了解:Android 生命周期。