后台服务在 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 +版本中遇到此问题

当您"关闭"您的应用程序(即您在最近的应用程序屏幕上将其滑动(时,您实际上并没有关闭应用程序,您只会关闭基础活动。在大多数情况下,这对应于正在关闭的应用,但如果正在运行后台服务,则不会终止该服务。这是有充分理由的:即使WhatsApp关闭,你仍然希望接收WhatsApp消息。因此,WhatsApp启动后台服务来检查新消息,即使应用程序已关闭。

因此,您需要通知后台服务它应该取消其任务的事实。

我开发了一个媒体应用程序,该应用程序使用连接到MediaControllerMediaBrowserService。因此,我可以在我的活动中执行以下操作onDestroyMethod

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

这会告诉MediaBrowserService停止并退出。

编辑:由于您使用通用服务,因此需要调用stopService

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

相关内容

  • 没有找到相关文章

最新更新