Служба останавливается, когда основное приложение закрывается

Когда я закрываю основное приложение, служба перестает транслировать намерения. Где ошибка? Я не могу найти способ держать его в рабочем состоянии.

Приемник трансляции:

public class CustomReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Toast.makeText(context, "Custom Broadcast recevied", Toast.LENGTH_SHORT).show();
}}

Сервис (AAA.java):

public class AAA extends Service {
final class MyThreadClass implements Runnable {
    int service_id;
    MyThreadClass(int service_id) {
        this.service_id = service_id;
    }

    @Override
    public void run() {
        synchronized (this) {
            try {
                while (true) {
                    Thread.sleep(3000);

                    Intent i = new Intent();
                    i.setAction("cz.johnyapps.custombroadcast");
                    sendBroadcast(i);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

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

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Thread thread = new Thread(new MyThreadClass(startId));
    thread.start();

    return START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
}}

Манифест:

<service android:name="cz.johnyapps.notificationservice.AAA"
        android:exported="true"
        android:process=":ServiceProcess"/>

Основное действие: startService(new Intent(this, AAA.class));


person Honza Johny Pejsar    schedule 25.03.2017    source источник


Ответы (2)


Используйте метод startForeground внутри Сервиса, чтобы предотвратить такое поведение

person Vyacheslav    schedule 25.03.2017
comment
Когда уведомление отображается, оно работает. Но мне это нужно без уведомления - person Honza Johny Pejsar; 25.03.2017
comment
Вы должны использовать процесс переднего плана, чтобы убедиться, что ваш процесс не будет убит. - person Vyacheslav; 26.03.2017
comment
@HonzaJohnyPejsar кстати, вы можете попробовать флаг Start_sticky - person Vyacheslav; 26.03.2017
comment
START_STICKY не работает и используется в опубликованном мной коде. - person Honza Johny Pejsar; 26.03.2017
comment
@HonzaJohnyPejsar, хорошо. единственное решение - использовать процесс переднего плана. Таким образом, нет способа избежать этого в общем случае. - person Vyacheslav; 26.03.2017
comment
Итак, как это, например. Ютуб делает? Когда есть новое видео, оно отображает уведомление. Должно быть что-то работает в фоновом режиме в поисках новых видео - person Honza Johny Pejsar; 26.03.2017
comment
@HonzaJohnyPejsar, я действительно не знаю твоей задачи. Чтобы сделать что-то в фоновом режиме (задача на несколько секунд), вы можете использовать класс wakefulbroadcastreceiver. Это помогает сервису жить какое-то время. - person Vyacheslav; 26.03.2017
comment
@HonzaJohnyPejsar, чтобы разбудить широковещательный приемник, вы должны использовать диспетчер тревог. - person Vyacheslav; 26.03.2017

Насколько мне известно, один из способов - запустить службу даже после закрытия приложения.

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

Пример: приложение для воспроизведения звука мультимедиа по умолчанию на телефоне Android. Если вы закроете приложение, на панели уведомлений появится уведомление, которое поддерживает службу, чтобы музыка продолжала воспроизводиться в службе.

person Atif Mukhtiar    schedule 25.03.2017
comment
мне нужно без предупреждения - person Honza Johny Pejsar; 25.03.2017
comment
тогда вам нужно добавить поток, который будет работать все время, чтобы эта служба работала. - person Atif Mukhtiar; 25.03.2017
comment
как мне это сделать? - person Honza Johny Pejsar; 26.03.2017
comment
Я думаю, что сделал это с помощью Thread thread = new Thread(new MyThreadClass(startId)); - person Honza Johny Pejsar; 26.03.2017
comment
Служба работает так, как вы хотели ..? - person Atif Mukhtiar; 26.03.2017
comment
Неа. Он умирает, когда я закрываю основное приложение - person Honza Johny Pejsar; 26.03.2017