2017-01-20 22 views
0

我最近创建了我的第一个Android应用。这是一个非常简单的应用程序,它有两个计数器用于在IRL纸牌游戏中为两个团队保留分数。无论如何,如果用户选择访问其他应用程序,而应用程序打开前例如。检查WhatsApp,并让应用程序在后台运行,大多数情况下工作正常......如果用户远离应用程序很长时间,应用程序往往会重置为默认状态,这意味着分数计数器都是重置为0,这是非常令人沮丧的。有没有办法来防止这种情况发生?就像将应用程序的状态保存在内存中,直到用户返回或类似的东西?应用计数器是基本的Textview对象。提前致谢!Android应用在空闲时间后重置

回答

0

你不能阻止你的进程被终止。如果您希望数据即使在流程终止后仍能存活,请将您的数据保存在数据库,SharedPreferences或其他类型的文件中。

+0

您可以防止一个过程被终止:https://developer.android.com/guide/components/services .html#Foreground,但这可能不是这个用户想要的。 – 01BTC10

+0

@ 01BTC10:这只会增加过程将继续存在的可能性。这不是一种保证,并且有办法可以终止这个过程。 – CommonsWare

0

可以通过savedInstanceState变量保存/恢复状态。

@Override public void onCreate(Bundle savedInstanceState) { } 

https://developer.android.com/guide/components/activities/activity-lifecycle.html

当用户使用其他应用程序,则在onPause()的onStop()事件被调用。一段时间后,操作系统释放内存并调用onDestroy()。这是您拯救任何州的最后机会。

+0

这个状态只会持续很短的时间(约30分钟左右)。这可能或可能不够。 – CommonsWare

0

您需要的onSaveInstanceState实施和onRestoreInstanceState

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 

    savedInstanceState.putInt("int", 1); 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    int myInt = savedInstanceState.getInt("int"); 
} 

或使用库:IcePick

+0

谢谢。我如何准确使用它?我可以把它放到我的代码中吗?我很抱歉,我对此感到陌生,代码对我来说看起来并不熟悉,所以不太确定该怎么做。 – Hackermaan

+0

是的,你可以使用但设置你自己的变量: here savedInstanceState.putInt(“int”,1); and here int myInt = savedInstanceState.getInt(“int”); –