Ожидание обратных вызовов перед остановкой службы при закрытии приложения - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь запустить несколько асин c функций, когда пользователь закрывает мое приложение Android.

Идея состоит в том, что основной сервис остановится только после того, как эти функции будут завершены. , Проблема в том, что код внутри обратных вызовов, кажется, не запускается.

public class DeviceConnectionService extends Service {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);

        ...

        return Service.START_STICKY; // Sticky so it doesn't close unless asked to
    }


    ...

    @Override
    public void onTaskRemoved(Intent rootIntent) {

        // Runs when the user closes the app 

        closeConnectionService();

        super.onTaskRemoved(rootIntent);
    }


    private void closeConnectionService() {

        Log.e(TAG, "CLOSING DEVICE CONNECTION SERVICE");

        // When closing the app, we  first stop all data collection
        CommonSingleton.CallBackSdkOperation cb = new CommonSingleton.CallBackSdkOperation() {
            @Override
            public void onComplete() { // When the SDK is stopped
                Log.e(TAG, "2"); // TODO: Doesn't seem to run


                ...

                // After we close the SDK and stop all data collection, we send all remaining data to the server
                DeviceDataLibrary.CallbackDataFileUpdate dataUpdateCallback = new DeviceDataLibrary.CallbackDataFileUpdate() {
                    @Override
                    public void onFinished() {



                        Log.e(TAG, "----------- All data updates finished");

                        stopSelf(); // after everything is done, we close this service
                    }

                    @Override
                    public void onError() {
                        Log.e(TAG, "----------- All data updates finished with errors");
                        stopSelf();
                    }
                };
                deviceData.writeRemainingData(dataUpdateCallback);

                Log.e(TAG, "3");

            }
        };
        CommonSingleton.getInstance().stopSDK(cb);

        Log.e(TAG, "1");


    }

Как вы можете видеть, у меня есть несколько журналов по всему коду, чтобы увидеть, что происходит.

Журнал только сообщает шаг "1".

Я искал ответ, но ничего не нашел. Я даже правильно подхожу к этому?

Спасибо за вашу помощь.

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