Если приложение зависает или закрывается из диспетчера задач, тогда я хочу нажать api - PullRequest
0 голосов
/ 27 июня 2018

Я создал службу и назвал этот класс службы из BaseActivity.

Intent serviceIntent = new Intent(this, UserAvailabilityService.class);
        startService(serviceIntent);

public class UserAvailabilityService extends Service {

    private static final String TAG = UserAvailabilityService.class.getSimpleName();
    boolean isChecked = false;
    boolean isUserAvailable = false;


    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "onCreate()");
        isChecked = getAvailableStatusFromFref();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "onStartCommand()");
        return START_NOT_STICKY;
    }

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        super.onTaskRemoved(rootIntent);
        Log.i(TAG, "onTaskRemoved()");
        if(isChecked) {
            //Hit a api
        }
        else
        {

        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy()");
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        Log.i(TAG, "onLowMemory()");
    }
    }

Если приложение вылетает или закрывается из диспетчера задач, тогда я хочу нажать api.

Прямо сейчас, когда я перелистываю приложение из фона, вызывается этот метод onTaskRemoved. и я бью по API.

Но когда я закрываю то же самое приложение из диспетчера задач (Настройка-> Приложения-> Имя приложения-> Принудительная остановка), этот метод onTaskRemoved не вызывается.

Любая идея, пожалуйста, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Лучшее, что вы можете сделать, это вызвать isFinishing (), который проверяет, уничтожается ли он у вас методом onPause ()

@Override
protected void onPause(){
    super.onPause();
    if(isFinishing){
        callApi();
    }
}
0 голосов
/ 27 июня 2018

Не возможно. Вы не можете сказать из приложения, будет ли приложение прекращено. Вы можете наблюдать за завершением из второго приложения, но в любое время первое может быть закрыто без уведомления. Не говоря уже о множестве способов, которыми оба приложения могли быть закрыты (например, они могли просто вытащить батарею). Вы никогда не должны писать код, который требует от вас выполнения каких-либо действий при завершении работы, потому что он никогда не будет надежным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...