Android保存实例状态

Android保存实例状态,android,instancestate,Android,Instancestate,我已经创建了两个活动A和B。在活动A中,使用onSaveInstanceState方法,我正在保存bundle值exoutState.putStringselectSaveDate、this.CalSelectedDate并转到活动B。当我点击活动A的返回按钮时,在oncreate方法中,bundle值为null。我无法在oncreate方法中获取保存的值 @Override protected void onSaveInstanceState(Bundle outState) { su

我已经创建了两个活动A和B。在活动A中,使用onSaveInstanceState方法,我正在保存bundle值exoutState.putStringselectSaveDate、this.CalSelectedDate并转到活动B。当我点击活动A的返回按钮时,在oncreate方法中,bundle值为null。我无法在oncreate方法中获取保存的值

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.clear();
    Log.i("bundleSave", "tester1" + this.CalSelectedDate);
    outState.putString("selectSaveDate", this.CalSelectedDate);
   }
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            if(savedInstanceState != null){
            Log.i("todolist", "dsa" + savedInstanceState.getString("selectSaveDate"));
        }
    }

您仅在OnSaveInstanceState方法中的捆绑包中存储数据,以便在您的活动被销毁和重新创建时(例如在旋转屏幕时)或当android操作系统可能决定在资源不足时终止您的活动时,持久化数据。当您在当前执行的活动A之上启动活动B时,A将处于停止状态,因此,您的A活动不会被销毁。另外,当您从onStart返回时,下一个调用的方法是onStart,从技术上讲,onRestart是在onStart之前调用的,但是我发现很少实现回调

总之,如果您试图在当前正在执行的活动之上启动活动之间保持持久化数据,您可以将该数据存储在该活动的实例变量中。如果您试图在应用程序启动之间持久保存数据,那么您需要考虑将数据存储在Android内置的sqllite数据库或Android的SharedReferences中

您还应该对活动生命周期有一个真正的了解,这是在android中成功编写代码所需要的技巧:


请尝试重写onSaveInstanceStateBundle savedInstanceState,并将要更改的应用程序状态值写入Bundle参数,如下所示:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);
  // Save UI state changes to the savedInstanceState.
  // This bundle will be passed to onCreate if the process is
  // killed and restarted.
  savedInstanceState.putDouble("myDouble", 1.9);
  savedInstanceState.putInt("MyInt", 1);
  savedInstanceState.putString("MyString", "How are you");
  // etc.
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  // Restore UI state from the savedInstanceState.
  // This bundle has also been passed to onCreate.
  double myDouble = savedInstanceState.getDouble("myDouble");
  int myInt = savedInstanceState.getInt("MyInt");
  String myString = savedInstanceState.getString("MyString");
} 


 or follow activity life cycle for better understanding.
它将被传递到onCreate和onRestoreInstanceState,您可以在其中提取如下值:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);
  // Save UI state changes to the savedInstanceState.
  // This bundle will be passed to onCreate if the process is
  // killed and restarted.
  savedInstanceState.putDouble("myDouble", 1.9);
  savedInstanceState.putInt("MyInt", 1);
  savedInstanceState.putString("MyString", "How are you");
  // etc.
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  // Restore UI state from the savedInstanceState.
  // This bundle has also been passed to onCreate.
  double myDouble = savedInstanceState.getDouble("myDouble");
  int myInt = savedInstanceState.getInt("MyInt");
  String myString = savedInstanceState.getString("MyString");
} 


 or follow activity life cycle for better understanding.

为什么不使用共享优先权?目前我正在使用日历。我需要存储月份,我必须在oncreate方法中检索。另外,请不要忘记更新有用的答案,这对您也有好处。