在Android中处理一个简单应用程序的运行时更改 - 我是否需要使用Bundle?

时间:2013-01-12 23:00:45

标签: android

我正在制作我的第一个Android应用程序,它只包含editText和Spinner。阅读活动周期,我想知道在我的情况下是否甚至需要使用Bundle机制。

由于小部件的状态会自动保留 - 我可以只调用旋转器上的getSelectedItem()方法和在Activity的onCreate()方法内的EditText上调用getText()并将其传递给我新重新创建的模型对象而不是使用Bundle机制吗?这种方法的优点和缺点是什么?

1 个答案:

答案 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)因为后者不属于   生命周期回调,因此不会在每种情况下调用   在其文档中描述。