Фоновая служба не работает на версии Android 7+

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

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

// Вот моя услуга ----

public class JobSyncFAQ extends Service {

private Message msg;
    private Looper mServiceLooper;
    private ServiceHandler mServiceHandler;

public JobSyncFAQ() {
}

private final class ServiceHandler extends Handler {
    public ServiceHandler(Looper looper) {
       super(looper);
    }
    @Override
    public void handleMessage(Message msg) { 
        // here is my stuff
        stopSelf(msg.arg1);
    }
 }
public void onCreate() {
super.onCreate();
HandlerThread thread = new HandlerThread("JobSyncFAQ", Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
msg = mServiceHandler.obtainMessage();
msg.arg1 = startId;
mServiceHandler.sendMessage(msg);
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
mServiceHandler.removeCallbacks(mServiceLooper.getThread());
mServiceLooper.quit();
Intent intent = new Intent(getApplicationContext(),JobSyncFAQ.class);
            sendBroadcast(intent);
}

//and in my receiver 

public void onReceive(Context context, Intent intent) {
context.startService(new Intent(context, JobSyncFAQ.class));
}

обратите внимание - я столкнулся с этой проблемой только для версии N +

Насколько я понимаю ваш вопрос, ваша основная проблема заключается не в том, что уведомление не отображается, а в том, что ваша фоновая служба не работает, я прав? Если да, то что вы пытаетесь делать в фоновом режиме и проверяли ли вы, что ваша фактическая задача выполняется?

vatbub 07.06.2018 10:25

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

Chandrashekhar Tayade 07.06.2018 10:31

Итак, ваша служба работает, но когда вы закрываете приложение, служба продолжает работать?

vatbub 07.06.2018 10:32

да, пока его работа не сделана ... после этого ... ничего ...

Chandrashekhar Tayade 07.06.2018 10:33

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

vatbub 07.06.2018 10:43
1
5
582
1

Ответы 1

Когда вы «закрываете» свое приложение (т. Е. Проводите пальцем по экрану недавних приложений), вы фактически не закрываете приложение, а только закрываете базовое действие. В большинстве случаев это соответствует закрытию приложения, но если у вас запущена фоновая служба, служба не завершается. На это есть веская причина: вы все еще хотите получать сообщения WhatsApp, даже когда WhatsApp закрыт. Следовательно, WhatsApp запускает фоновую службу для проверки новых сообщений, даже когда приложение закрыто.

По этой причине вам необходимо уведомить фоновую службу о том, что она должна отменить свою задачу.

Я разработал мультимедийное приложение, в котором используется MediaBrowserService, подключенный к MediaController. Поэтому в своей деятельности onDestroyMethod я могу делать следующее:

MediaControllerCompat mediaControllerCompat = MediaControllerCompat.getMediaController(getActivity());
if (mediaControllerCompat != null)
    mediaControllerCompat.getTransportControls().stop();

Это говорит MediaBrowserService остановиться и выйти.

Редактировать: Поскольку вы используете общий сервис, вам необходимо вызвать stopService:

stopService(new Intent(MyActivity.this, JobSyncFAQ.class));

Другие вопросы по теме