为什么在强制停止应用程序时作业服务仍在运行?

时间:2018-03-06 10:02:26

标签: android android-service android-lifecycle forceclose android-jobscheduler

在我的录音应用程序中,我创建了一个作业服务,它将按计划的频率间隔安排录制作业。一旦我安排作业记录每5分钟(例子),在几次录制后,当我强制停止应用程序时,我可以看到作业服务仍在运行并尝试记录并失败。应用程序中的所有其他服务都已停止。

当我强制停止应用程序时,为什么作业服务仍在运行?我是否需要特别小心地停止工作?

4 个答案:

答案 0 :(得分:0)

  

很多 Android应用在后台运行小型服务   允许互连与其他应用/服务和   当您不使用应用程序(Facebook,短信,电子邮件,广告等)时,允许通知。请注意,在后台运行的SERVICE与在后台运行的APP之间运行的APP之间存在差异。

因此,您可以在用户关闭应用时通过以下两种方式销毁服务来阻止它。

首先,在服务类中,调用:

stopSelf();

OR

其次,在其他课程中,例如 MainActivity

Intent i = new Intent(this, ServiceName.class);
stopService(i);

这两项都会停止您的服务。确保您返回START_NOT_STICKY,以便该服务不会再次启动。

答案 1 :(得分:0)

在清单文件中使用以下代码作为您的服务。这将停止服务的任务。

master

答案 2 :(得分:0)

你的工作是定期工作,对吗?您是否尝试使用各自的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();

答案 3 :(得分:0)

我知道为时已晚,但我发表我的答案以供将来参考:

Job Scheduler将继续工作至少15分钟。(即使您最近通过滑动或强制停止清除了该应用程序也是如此)

因此,如果您希望服务在应用程序关闭后停止运行,则应使用Bound Service

绑定服务将继续工作(即使在后台),直到关闭应用程序为止。