поддержание работоспособности службы после закрытия приложения - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь создать приложение, которое связывается с моим локальным хостом и выполняет поиск в базе данных.
Я уже установил соединение и нахожу данные, но мне нужно оставаться на связи и отправить уведомление, если в таблице есть какие-либо изменения, но я не могу понять, как сохранить соединение, даже когда я закрываю приложение, потому что оно закрывает все, даже сервис.
Служба не работает.

Это мой класс:

public class SensorService extends Service {

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


@Override
public void onCreate() {
    super.onCreate();
    Toast.makeText(this,"Starting",Toast.LENGTH_SHORT).show();
}


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    boolean bandera = true;
        Toast.makeText(this, "Checking data...", Toast.LENGTH_SHORT).show();
    return START_STICKY;
}

@Override
public void onTaskRemoved(Intent rootIntent) {
    super.onTaskRemoved(rootIntent);
    stopService(new Intent(this,SensorService.class));
    startService(new Intent(this,SensorService.class));
}

@Override
public void onDestroy() {
    startService(new Intent(this,SensorService.class));
}
}

Каждый раз, когда я закрываю приложение, служба запускается еще раз и не более.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Если вы хотите, чтобы служба продолжала работать после закрытия приложения, вам необходимо вызвать метод startForeground (int, Notification) из службы. Android ограничивает работу дольше запущенных служб в фоновом режиме, пока пользователь отображает уведомление, сообщающее ему о том, что служба запущена (например, музыкальный проигрыватель или служба загрузки).

Это намеренное ограничение проекта, которое гарантирует, что разработчики не будут запускать сервисы в фоновом режиме, которые работают бесконечно, без ведома пользователя. Предоставьте собственное уведомление (может быть любым), и вы сможете запустить службу в фоновом режиме.

Для получения более подробной информации об этом методе, прочитайте его по адресу: startForeground (int, Notification)

0 голосов
/ 07 мая 2018

Вы можете использовать onTaskRemoved и перезапустить службу при необходимости.

@Override
public void onTaskRemoved(Intent rootIntent){
       super.onTaskRemoved(rootIntent);
       //restart your service
}

Обратите внимание, что если вы используете onTaskRemoved, запустите службу как липкую, чтобы она не была перезапущена.

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    return START_NOT_STICKY;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...