在我的录音应用程序中,我创建了一个作业服务,它将按照预定的频率间隔安排录制作业。一旦我安排作业记录每5分钟(例子),在几次录制后,当我强制停止应用程序时,我可以看到作业服务仍在运行并尝试记录并失败。应用程序中的所有其他服务都已停止。
当我强制停止应用程序时,为什么作业服务仍在运行?我是否需要特别小心地停止工作?
很多Android应用程序在后台运行一个小型服务,允许与其他应用程序/服务互连,并在您不使用应用程序(Facebook,短信,电子邮件,广告等)时允许通知。请注意,在后台运行的SERVICE与在打开后运行的APP之间存在差异。
因此,您可以通过以下两种方式在用户关闭应用时销毁服务来阻止它。
首先,从Service类中调用:
stopSelf();
要么
其次,从另一个类中,例如您的MainActivity:
Intent i = new Intent(this, ServiceName.class);
stopService(i);
这两个都将停止您的服务。确保您返回START_NOT_STICKY,以便服务不会再次启动。
在清单文件中使用以下代码作为您的服务。这将停止服务的任务。
<service android:name="service" android:stopWithTask="true"/>
你的工作是定期工作,对吗?您是否尝试使用各自的ID明确取消作业?
JobScheduler scheduler = (JobScheduler)
mContext.getSystemService(Context.JOB_SCHEDULER_SERVICE);
for (JobInfo jobInfo : scheduler.getAllPendingJobs()) {
if (jobInfo.getId() == jobID) {
scheduler.cancel(jobID);
Log.i(TAG,"Cancelled Job with ID:" + jobID);
}
}
或者您可以尝试取消已通过此软件包在JobScheduler注册的所有作业。
JobScheduler scheduler = (JobScheduler)
mContext.getSystemService(Context.JOB_SCHEDULER_SERVICE);
scheduler.cancelAll();