本文共 2033 字,大约阅读时间需要 6 分钟。
JobService是Android L时候官方加入的组件。适用于需要特定条件下才执行后台任务的场景。 由系统统一管理和调度,在特定场景下使用JobService更加灵活和省心,相当于是Service的加强或者优化。
因为要开发后台持续定位功能,然后就想着之前使用百度地图定位都是前台定位,所以还需要学习一下,顺便记录一下。写一个简单地打印日志的耗时任务服务:
@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配置文件中注册一下:
在需要启动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()); }
效果图:
基本上就是一分钟多一点启动一次服务。转载地址:http://mpdqi.baihongyu.com/