【问题标题】:onResume works even if activity is started即使活动开始,onResume 也有效
【发布时间】:2014-12-01 19:00:31
【问题描述】:

我有一个 onPause 和一个 onResume,看看这两个:

@Override
public void onResume(){
    super.onResume();
    String str = "";

    SharedPreferences prefs = this.getSharedPreferences(
            "com.example.app", Context.MODE_PRIVATE);
    for (int i = 0; i<prefs.getAll().size(); i++){
        str = prefs.getString(String.valueOf(i), "");
        meds.add(str);
        adap.add(str);
        adap.notifyDataSetChanged();}}


  @Override
public void onPause() {
    super.onPause();
    SharedPreferences prefs = this.getSharedPreferences(
            "com.example.app", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    for (int i = 0; i<meds.size(); i++){
        editor.putString(String.valueOf(i), meds.get(i));
        String str1 = editor.toString();
        String str = prefs.getString("0", "");

    }
    editor.commit();
}

现在,每当我真的想恢复活动时,这都可以正常工作 - 比如说,用户按下后退按钮。

但是,当我完全重新启动应用程序(如:关闭程序,再次运行)时,显然会调用 onResume,因为我的数据设置为保存在 onPause 中的数据。

我只是使用了错误的方法吗? 实际重新启动应用程序时,我想从我的默认数据开始,而不是从 onPause 中保存的数据开始。

【问题讨论】:

  • See Activity LifeCycle OnResume 总是在您启动新活动时被调用。
  • 嗯。因此,如果我不想在重新启动应用程序时拥有我的数据,我必须在 onDestroy 中销毁它们?因为在程序停止时会调用 onDestroy?
  • 实际上onDestroy 并不可靠,并且在某些情况下可能不会被调用,例如当操作系统因内存需求而终止您的活动时。
  • 所以我现在知道我做错了什么,但不知道如何正确地做。是否有变量或某事。我可以调用 onCreate 来检查 Activity 是否在应用运行期间首次启动?
  • 检查我的答案。如果有帮助,请告诉我。

标签: android onresume application-restart


【解决方案1】:

OnResume 总是在您启动新活动时被调用。您可以从Activity LifeCycle 看到这一点。如果您不想在重新启动应用程序时获取您的数据,请在onPause 中使用isFinishing() 方法,如果它返回true,请在关闭Activity 之前清除所有内容。

isFinishing() 检查此活动是否正在完成过程中,可能是因为您对其调用了 finish() 或其他人已请求完成。

【讨论】:

  • 谢谢,只是测试。我想当我简单地关闭模拟器或手机时这不起作用,是吗?如果没有时间调用该方法....
  • 您尝试在仍在活动时关闭手机?它不调用onPause
  • 是的,我试过了,你当然是正确的,onPause 没有被调用,把它写成答案,我会接受。我的错 - 我应该首先覆盖 onBackPressed 而不是 onPause 。那么我现在应该如何处理这个问题,stackoverflow 上可以接受什么?
【解决方案2】:
  1. onCreate()中设置默认值。
  2. OnResume()中获取最新值并更新 药物适应
  3. OnPause() 中保存您的首选项.. 这就是您的喜好 现在正在做..
  4. 您无需在 onDestroy() 中清除首选项, 因为不能保证系统调用 onDestroy()

【讨论】:

  • ahm.....这正是我现在正在做的事情。然后发生的是:应用程序启动,Activity 运行 onCreate,设置默认值。然后运行 ​​onResume,更新我的价值观。这正是我不想要的。
  • 因为您不需要维护以前的应用程序状态..根本不要使用首选项,而是使用一些成员变量来临时存储您的值,当活动从 onPause() 切换到onResume() .希望这符合您的要求:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
相关资源
最近更新 更多