Android: OnDestroy не вызывается, когда я закрываю приложение из кнопки " последние приложения

когда мы нажимаем эту кнопку

мы видим приложения, которые мы не закрыли, как это

но когда мы хотим закрыть приложение с этого экрана (ниже изображения), метод onDestroy () не вызывается, однако приложение закрыто. Мне нужно вызвать 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
}