Android学习使用JobService
Posted Tobey_r1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android学习使用JobService相关的知识,希望对你有一定的参考价值。
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的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 JobService 是不是在 android 中运行?
在 Android 中不需要 android.permission.BIND_JOB_SERVICE 权限