【问题标题】:How do I prevent my Android app from resetting every time my phone sleeps?如何防止我的 Android 应用在每次手机休眠时重置?
【发布时间】:2012-03-14 11:36:12
【问题描述】:

如果我的手机休眠或我离开我的应用发送短信/接听电话,我的应用会重新启动。 我该如何防止这种情况?

我希望保存对象而不是基本数据类型。如果应用程序关闭或手机关机,我不需要保存应用程序的当前状态/数据,但我已准备好在必要时执行此操作。

【问题讨论】:

标签: java android multithreading sleep save


【解决方案1】:

当调用onSaveInstanceState(Bundle outState) 时,您需要在主活动中保存所有临时状态变量。每当您的应用程序有可能被操作系统破坏时,都会调用它。在您的onCreate(Bundle savedInstanceState) 中,如果savedInstanceState 不为空,则表示您的活动先前已终止,您需要从该捆绑包中重新填充临时状态变量。

这就是为什么您的主 Activity 正在“重新启动”的原因,因为当您的主 Activity 在被杀死后恢复时会再次调用 onCreate,但它不会从包中加载数据以重新创建应用暂停时的状态。

这里有更详细的描述:http://developer.android.com/reference/android/app/Activity.html

【讨论】:

  • 有没有办法使用 onSaveInstanceState 保存对象?
【解决方案2】:

重写此方法以保存您的对象

@Override
public Object onRetainNonConfigurationInstance() 
{
  if (myObject != null) // Check that the object exists
      return(myObject);
  return super.onRetainNonConfigurationInstance();
}

在您的 onCreate() 方法中使用此代码重新加载您的对象。

if (getLastNonConfigurationInstance() != null)
    {
      table = (Table)getLastNonConfigurationInstance();

如果您的手机关闭应用以节省内存或手机休眠,这将保存您的对象。按下/关闭您的对象不会保存它。您可以提示用户按下主页按钮,或者再次按下返回按钮退出使用 onBackPressed() 或使用 SQL 将数据永久存储在您的对象中。

【讨论】:

    猜你喜欢
    • 2014-09-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2011-01-30
    相关资源
    最近更新 更多