如何在每次手机睡眠时阻止我的Android应用重置?

时间:2012-02-24 00:29:54

标签: java android multithreading sleep save

如果我的手机在睡觉或我离开我的应用程序发送文本/接听电话我的应用程序重新启动。 我该如何防止这种情况?

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

2 个答案:

答案 0 :(得分:1)

调用onSaveInstanceState(Bundle outState)时,您需要在主活动中保存任何临时状态变量。只要您的应用程序有可能被操作系统销毁,就会调用此方法。在onCreate(Bundle savedInstanceState)中,如果savedInstanceState不为空,则表示您的活动先前已终止,您需要从该捆绑包中重新填充临时状态变量。

这就是你的主要Activity正在“重新启动”的原因,因为当你的主Activity在被杀死后恢复时会再次调用onCreate,但是它没有从bundle中加载数据来重新创建应用程序暂停时的状态。 / p>

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

答案 1 :(得分:0)

重写此方法以保存对象

@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将数据永久存储在对象中。