2015-08-21 1 views
2

Я использую класс со статическими значениями, называемыми DB (для базы данных) в моем приложении. Когда я запускаю приложение, статический байтовый массив этого класса заполняется и используется. Затем, когда я частично закрываю приложение (не закрывая его окончательно, просто помещая в фоновый режим), если он снова откроется через 20 секунд или больше, значение переменной все еще здесь, но если я позволю своему приложению в фоновом режиме более 1 минута значение становится равным нулю.Android - потеря данных при частичном закрытии приложения

Как я могу избежать этого?

+1

хранить ваши данные в базе данных или общих настройках, например, вы должны быть – tyczj

+0

Да, но я не хочу его сохранять, когда я действительно закрываю свое приложение –

+1

, нет способа узнать, закрываете ли вы приложение или ОС убивая ваше приложение – tyczj

ответ

1

сохранить значение переменной shared preferences и загрузить значение из общих настроек в onResume() Способ действия и сохранить значение в методе onPause().

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(); 
} 
+0

В этом случае вы должны использовать пакет onsavedinstance вместо общих настроек. Хотя ваше решение действительно. –

+0

Как? Опубликуйте свое решение, вероятно, будет лучше, чем мое! –

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 
    } 
... 
} 

Я надеюсь, что это поможет!

Удачи вам в будущем!

+0

Это очень хорошо, но ваш ответ не полностью соответствует моей проблеме. Мой байт [] должен быть пустым при запуске приложения и должен быть одинаковым во всех действиях, как я могу справиться с этой ситуацией с помощью вашего метода? Поскольку вы говорите, что я должен установить значение байтового массива в методе onCreate, но в моем методе onCreate мой байтовый массив равен null, его значение устанавливается немного позже. После установки он делится с другими действиями, и когда приложение убито, байт [] должен быть сохранен как null. –