android - 为一个简单的应用程序处理 Android 中的运行时更改——我需要使用 Bundle 吗?

标签 android

我正在制作我的第一个 Android 应用程序,其中仅包含 editText 和 Spinner。阅读 Activity 周期,我想知道在我的情况下是否有必要使用 Bundle 机制。

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

最佳答案

小部件的状态不会自动保留。当您的 Activity 被销毁时,它会丢失所有有关状态的信息。我建议您使用共享首选项保存应用程序状态。这是来自谷歌的示例 developers site .它允许您通过存储键值对来保存您的应用程序状态,这对您的应用程序来说应该足够了。

当您的 Activity 停止时,在共享首选项中保存文本和微调项位置 - 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( ) 方法(数据肯定会被保存)。文档说:

Note that it is important to save persistent data in onPause() instead of onSaveInstanceState(Bundle) because the latter is not part of the lifecycle callbacks, so will not be called in every situation as described in its documentation.

关于android - 为一个简单的应用程序处理 Android 中的运行时更改——我需要使用 Bundle 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14298866/

相关文章:

java - 如何监控 Activity 类之外的 Activity 的生命周期

java - 如何从我的应用程序向另一台 Android 设备发送短信

android - 如何通过 Google Play 排行榜 UI 检测注销?

android - 调用 onCreate() 方法而不是 onNewIntent()

android - Google map 首次在我的 Android 应用程序上无法加载

android - 我们对 Cordova iOS/Android 移动应用程序使用什么 OAuth 2.0 重定向 URI?

android - 可以在同一台机器上安全地运行多个 Android 模拟器并使用套接字进行通信吗?

java - 在 Android 模拟器上创建 UDP 连接

java - setOnKeyListener 的工作原理

android - 在 PreferenceFragmentCompat 中获取自定义布局引用