您的位置:

Jobservice详解

一、jobservice需要进程中保持开启吗

对于jobservice,它并不需要在应用程序中保持开启,也不需要持久化运行。因为jobservice是由系统唤醒并启动的,当其完成工作后就会被系统自动销毁。唯一需要保证的是,在应用程序退出或被销毁时不要对jobservice进行手动销毁,避免因此导致后台任务无法正常执行。

二、jobservice保活

对于jobservice的保活问题,可以通过一些手段进行保证:

1、使用startForeground方法将它放在前台运行,这样系统便不会轻易销毁它。

2、使用setPersisted方法将jobservice进行持久化,这样即使系统回收了空闲内存,jobservice也会随着系统启动而自动重启。

3、使用定时唤醒的方法定时启动jobservice,确保它能够及时进行任务处理。

三、jobservice进程被杀 无法调用

当jobservice进程被杀死时,我们无法进行调用。这时可以使用JobScheduler的onStopJob方法进行相关处理:


public class MyJobService extends JobService {

    private boolean jobCancelled = false;

    @Override
    public boolean onStartJob(JobParameters params) {
        //执行任务
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        jobCancelled = true;
        //取消任务并重新调度
        return true;
    }
}

当进程被杀死时,系统会自动调用onStopJob方法,我们可以在其中进行任务的取消和重新调度。如果返回true,表示任务被取消但需要进行重试,返回false则表示任务已经成功执行或者不需要继续执行。

四、jobservice与JobScheduler的配合使用

在实际应用中,jobservice通常与JobScheduler一起使用来实现后台任务处理:


public class MyJobService extends JobService {

    private AsyncTask
    task;

    @Override
    public boolean onStartJob(JobParameters params) {
        task = new AsyncTask
     () {
            @Override
            protected Void doInBackground(Void... params) {
            //执行后台任务
            return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                jobFinished(params, false);
            }
        };
        task.execute();
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        if (task != null) {
            task.cancel(true);
            //重新调度任务
        }
        return true;
    }
}

    
   

在onStartJob方法中,我们创建一个异步任务来执行后台任务,任务完成后调用jobFinished方法通知JobScheduler任务已经完成。在onStopJob方法中,我们取消当前任务并重新调度,确保任务能够继续执行。

五、jobservice的应用场景

jobservice通常被用于一些需要在后台进行周期性任务处理的场景中,比如数据同步、统计分析等。它可以有效地解决常见的后台处理问题,避免了由于进程被系统回收而导致任务无法完成。