后台服务不适用于7+ Android版本

时间:2018-06-07 08:21:22

标签: android android-studio background-service jobservice

我想在我正在使用的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 :(得分:2)

当你"关闭"你的应用程序(即你在最近的应用程序屏幕上轻扫它),你实际上没有关闭应用程序,你只关闭基础活动。在大多数情况下,这对应于应用程序正在关闭,但如果您正在运行后台服务,则服务不会终止。这是有充分理由的:即使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));