Android: OnDestroy не вызывается, когда я закрываю приложение из кнопки " последние приложения
3 ответов
как указано в документации Android, это не гарантируется, что onDestroy()
будет вызываться при выходе из приложения.
"есть ситуации, когда система просто убьет процесс хостинга активности без вызова этого метода"
https://developer.android.com/reference/android/app/Activity.html#onDestroy%28%29
вместо этого вы можете создать службу, которая будет уведомлена, когда задача ваша работы внутри разрушается.
создать класс обслуживания:
public class ClosingService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
// Handle application closing
fireClosingNotification();
// Destroy the service
stopSelf();
}
}
объявите / зарегистрируйте свою службу в манифесте (в теге приложения, но вне любых тегов активности):
<service android:name=".services.ClosingService"
android:stopWithTask="false"/>
задание stopWithTask="false"
вызывает onTaskRemoved()
метод, который будет запущен в вашей службе, когда задача будет удалена из процесса.
здесь вы можете запустить логику закрытия приложения перед вызовом stopSelf()
уничтожить Услуга.
вы должны прочитать некоторую информацию о жизненном цикле активности. Есть одна вещь, о методе onDestroy, он не звонил все время. Вы не должны полагаться на это.
укажите пожалуйста, что вы пытаетесь достичь, и я постараюсь предложить лучшее решение.
предложение
Service Это будет огоньLocalBroadcast
каждые N секунд (это не очень тяжело для системы). Регистрация и BroadcastReceiver
для этого трансляция в Activities
. Таким образом, вы получите true
или false
в зависимости от того, есть ли BroadcastReceiver
что может поймать ваш LocalBroadcast
. И если нет приемников, чем проверить некоторые SharedPreferences
значение, указывающее, если Button
была нажата.ваша проблема в том, что onDestroy вызывается только вService
. В Activity
вызываемый метод onPause()
Проще говоря в вашей деятельности поле:
@Override
public void onPause()
{
//Put your Code here
}