Фоновая служба не работает на 7+ версии для Android - PullRequest
0 голосов
/ 07 июня 2018

Я хочу показать локальное уведомление в приложении для 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 + версии

1 Ответ

0 голосов
/ 07 июня 2018

Когда вы «закрываете» свое приложение (т.е. проводите по экрану на экране недавних приложений), вы фактически не закрываете приложение, вы только закрываете основную активность.В большинстве случаев это соответствует закрытию приложения, но если у вас запущена фоновая служба, она не прекращается.Это по уважительной причине: вы все еще хотите получать сообщения 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));
...