Android学习使用JobService

Posted Tobey_r1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android学习使用JobService相关的知识,希望对你有一定的参考价值。

关于

  JobService是Android L时候官方加入的组件。适用于需要特定条件下才执行后台任务的场景。 由系统统一管理和调度,在特定场景下使用JobService更加灵活和省心,相当于是Service的加强或者优化。
  因为要开发后台持续定位功能,然后就想着之前使用百度地图定位都是前台定位,所以还需要学习一下,顺便记录一下。

编写LocationJob继承JobService

  写一个简单地打印日志的耗时任务服务:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class LocationJob extends JobService {

    private Handler handler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(@NonNull Message msg) {
            JobParameters parameters = (JobParameters) msg.obj;
            //耗时操作,比如拉起一个定位服务
            jobFinished(parameters,true);
            return true;
        }
    });

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }

    @Override
    public boolean onStartJob(JobParameters params) {
        Message message = Message.obtain();
        message.obj = params;
        handler.sendMessage(message);
       Date times = new Date();
        Log.e("后台数据",times.toString());
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        Log.i("后台数据", "onStopJob start");
        return false;
    }
}

  在AndroidManifest.xml配置文件中注册一下:

<service android:name=".testServiceModel.LocationJob"
            android:permission="android.permission.BIND_JOB_SERVICE"/>

使用

  在需要启动jobservice的地方调用如下:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            shecduleJob();
        }


  private int mJobId = 0;

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    private void shecduleJob() {
        JobInfo.Builder builder = new JobInfo.Builder(mJobId++,new ComponentName(this, LocationJob.class));
        builder.setRequiresCharging(true); //是否在充电时执行
        builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
        builder.setRequiresDeviceIdle(false);//是否在空闲时执行
        builder.setMinimumLatency(1000*60);//延迟多久后执行,毫秒 
        builder.setOverrideDeadline(1000*60*15);//最多延迟多久
        JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
        scheduler.schedule(builder.build());
    }

  效果图:
在这里插入图片描述
  基本上就是一分钟多一点启动一次服务。

以上是关于Android学习使用JobService的主要内容,如果未能解决你的问题,请参考以下文章

Android JobService的使用及源码分析

如何检查 JobService 是不是在 android 中运行?

Android--使用JobService实现进程保活

在 Android 中不需要 android.permission.BIND_JOB_SERVICE 权限

JobService 的 onStartJob 方法在作业被调度后立即执行

安卓权威编程指南 挑战练习(第26章 在 Lollipop 设备上使用 JobService)