我在我的应用程序中使用了一个名为DB(用于数据库)的静态值类。当我第一次运行应用程序时,将填充并使用此类中的静态字节数组。然后,当我部分关闭我的应用程序时(如果在20秒后或多或少地重新打开它,那么我的应用程序的值仍然在这里),但是如果我让我的应用程序在后台运行超过1分钟值变为空。
我怎样才能避免这种情况发生?
答案 0 :(得分:1)
将变量值存储到shared preferences并在onResume()
活动方法中加载共享首选项中的值,并将值存储在onPause()方法中。
答案 1 :(得分:1)
正确处理生活方式事件是Android开发的一个重要方面。
我建议您阅读以下内容,以确保在关闭屏幕,更改为其他应用程序或可能会更改应用状态的任何其他操作时,了解应用程序会发生什么情况:
http://developer.android.com/training/basics/activity-lifecycle/index.html
我的建议是通过重写onSaveInstanceState()来存储你的数据,如下所示:
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
// Save the user's current game state
savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
然后在你的onCreate()上,你可以这样重新加载它:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState); // Always call the superclass first
// Check whether we're recreating a previously destroyed instance
if (savedInstanceState != null)
{
// Restore value of members from saved state
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
}
else
{
// Probably initialize members with default values for a new instance
}
...
}
我希望这有帮助!
祝你未来发展顺利!
答案 2 :(得分:0)
我在评论者的帮助下找到了解决方案。
对于那些遇到同样问题的人:
在所有活动中复制此内容,以确保在首选项中不断更新数据:
@Override
public void onPause(){
super.onPause();
String bytearray = Base64.encodeToString(DB.bytearray, Base64.DEFAULT);
prefs.edit().putString("BYTEARRAY", bytearray).apply();
}
@Override
public void onResume(){
super.onResume();
String bytearray = prefs.getString("BYTEARRAY", Base64.encodeToString(DB.bytearray, Base64.DEFAULT));
DB.bytearray = Base64.decode(bytearray, Base64.DEFAULT);
}
然后,在所有活动中添加此代码,以确保在关闭应用时不会保存这些值。
@Override
public void onDestroy(){
super.onDestroy();
String bytearray = "";
prefs.edit().putString("BYTEARRAY", bytearray).apply();
}