2015-07-01 4 views
4

Я создал приложение, которое использует ~ 10 МБ ОЗУ. Похоже, что когда я запускаю другие приложения, и мое приложение находится в фоновом режиме, оно иногда закрывается. Я подозреваю, что это связано с тем, что ОС Android закрывает фоновые приложения для целей управления ОЗУ (у телефона есть 1024 МБ общей ОЗУ).Как предотвратить Android OS от закрытия фонового приложения для памяти?

Есть ли способ, которым я могу поддерживать постоянное использование моего приложения в фоновом режиме программно или иначе?

+1

часть вашего приложения, которое должно работать в фоновом режиме должны находиться в Службе. Вы можете сделать это так, чтобы он перезапускался в случаях, когда Android убивает его (см. «Сервис.START_STICKY»). –

ответ

3

Использование службы для запуска в фоновом режиме.

Подробнее на Run Background Service.

+1

В Android O это работает всего несколько минут, а затем ваш процесс по-прежнему убивается. Ваше приложение не должно работать тихо в фоновом режиме в течение длительного периода времени. –

3

Вы не можете сохранить свое приложение в фоновом режиме по желанию ОС. Самое лучшее, что вы можете сделать, это сохранить и восстановить состояние вашей деятельности/фрагменты/просмотров и т.д.

Recreating an Activity

static final String STATE_SCORE = "playerScore"; 
static final String STATE_LEVEL = "playerLevel"; 
... 

//saving 
@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); 
} 

//restoring 
@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 
    } 
    ... 

}

Смежные вопросы