我正在制作我的第一个Android应用程序,它只包含editText和Spinner。阅读活动周期,我想知道在我的情况下是否甚至需要使用Bundle机制。
由于小部件的状态会自动保留 - 我可以只调用旋转器上的getSelectedItem()方法和在Activity的onCreate()方法内的EditText上调用getText()并将其传递给我新重新创建的模型对象而不是使用Bundle机制吗?这种方法的优点和缺点是什么?
答案 0 :(得分:1)
小部件的状态不会自动保留。当您的活动被销毁时,它会丢失有关州的所有信息。我建议您使用共享首选项保存应用程序状态。以下是Google developers site的示例。它允许您通过存储键值对来保存您的应用程序状态,它应该足以满足您的应用程序。
在您的活动停止后,将文字和微调器项目位置保存在共享偏好设置中onStop()
并恢复onCreate()
中的状态。
public class Calc extends Activity {
public static final String PREFS_NAME = "MyPrefsFile";
@Override
protected void onCreate(Bundle state){
super.onCreate(state);
. . .
// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);
setSilent(silent);
}
@Override
protected void onStop(){
super.onStop();
// We need an Editor object to make preference changes.
// All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", mSilentMode);
// Commit the edits!
editor.commit();
}
}
虽然您可以按onSaveInstanceState(Bundle)
方法保存应用程序状态,但通常更好的方法是在onPause()
或onStop()
方法中执行此操作(数据将被保存以确保)。文档说:
请注意,将持久数据保存在onPause()中非常重要 ofSaveInstanceState(Bundle)因为后者不属于 生命周期回调,因此不会在每种情况下调用 在其文档中描述。