1

我正在制作我的第一个 Android 应用程序,它仅由 editText 和 Spinner 组成。阅读活动周期,我想知道是否有必要在我的情况下使用 Bundle 机制。

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

4

1 回答 1

1

它不会自动保持的小部件的状态。当您的活动被破坏时,它会丢失有关状态的所有信息。我建议您使用共享首选项保存您的应用程序状态。这是来自谷歌开发者网站的一个例子。它允许您通过存储键值对来保存应用程序状态,它应该足以满足您的应用程序。

当您的活动停止时,将文本和微调器项目位置保存在共享首选项中 -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()oronStop()方法中执行此操作(数据肯定会保存)。文档说:

请注意,将持久数据保存在 onPause() 而不是 onSaveInstanceState(Bundle) 中很重要,因为后者不是生命周期回调的一部分,因此不会在其文档中描述的所有情况下都被调用。

于 2013-01-12T23:54:14.813 回答