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

问题描述 投票:0回答:3

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

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

android android-service android-lifecycle forceclose android-jobscheduler
3个回答
0
投票

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

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

首先,从Service类中调用:

stopSelf();

要么

其次,从另一个类中,例如您的MainActivity:

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

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


0
投票

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

<service android:name="service" android:stopWithTask="true"/>

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();
© www.soinside.com 2019 - 2024. All rights reserved.