Функция внутри службы останавливается после закрытия приложения - PullRequest
0 голосов
/ 04 мая 2020

Сервис все время работает в фоновом режиме, но по какой-то причине моя функция saveUserLocation(); через некоторое время останавливается. Когда приложение открыто, оно работает все время. Вот некоторые рисунки, показывающие, что служба по-прежнему работает в фоновом режиме после закрытия приложения, а на другой картинке я закрываю приложение, а затем logD все еще печатает в течение нескольких секунд, а затем останавливается.

служба в фоновом режиме

service

LogD -> logcat внезапно просто останавливается

logcat

Код от службы

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(TAG, "onStartCommand: called");

    notificationGenerator();
    getLocation();
    return START_NOT_STICKY;
}

private void getLocation() {
    // ---------------------------------- LocationRequest ------------------------------------
    // Create the location request to start receiving updates
    LocationRequest mLocationRequestHighAccuracy = new LocationRequest();
    mLocationRequestHighAccuracy.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    mLocationRequestHighAccuracy.setInterval(UPDATE_INTERVAL);
    mLocationRequestHighAccuracy.setFastestInterval(FASTEST_INTERVAL);
    mFusedLocationClient.requestLocationUpdates(mLocationRequestHighAccuracy, new LocationCallback() {
                @Override
                public void onLocationResult(LocationResult locationResult) {
                    Log.d(TAG, "(*) Service Running");
                }
            },
            Looper.myLooper()); // Looper.myLooper tells this to repeat forever until thread is destroyed
}

Манифест

<service android:name=".service.Service"
android:enabled="true"
android:exported="true"/>

В Logcat ничего не говорится об ошибке, он просто останавливается, а когда я снова запускаю приложение, он продолжает. Есть идеи, почему это останавливается?

1 Ответ

0 голосов
/ 04 мая 2020

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

1: Использовать средство оповещения о тревоге (следуйте этому [ { ссылка }] [1] )

2: Вы также можете использовать startForeground (). И это хороший подход для этого

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