一、前言
JobService
是用来优化后台进程的一个技术,最早是在API21,也就是Android 5.0的时候提供支持。虽然现在官方推荐使用WorkManager
来做后台优化,但是在有些项目上可能还会有人使用这个技术,所以这里进行一个简答的记录,以便可以进行维护。另外就是在Android7.0以后,无法再通过清单文件中注册CONNECTIVITY_ACTION
来监听网络状态变化。还有就是如果使用某些定时任务的话,在API19之后使用AlarmManager
不一定能保证其时效性,所以也需要使用JobService
或者WorkManager
来处理。
二、初步使用
JobService
是Service
的子类,也是对Service
的加强,需要与JobScheduler
、JobInfo
配合使用。对于另外两个的简单理解就是JobScheduler
是用来对JobService
进行调度的,决定其执行的时机和频次。JobInfo
是用来设置一些JobService
的执行信息,这里看个简单示例进行加深了解。
TextJobService.java
//需要实现两个函数onStartJob()和onStopJob()
//默认运行在主线程,所以需要开启一个子线程
public class TestJobService extends JobService {
@Override
public boolean onStartJob(JobParameters jobParameters) {
work.start();
return false;
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
return false;
}
private Thread work = new Thread(new Runnable() {
@Override
public void run() {
Log.e("YM-->","--->执行一个任务");
}
});
}
TestActivity.java
public class TestActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
scheduleService();
}
//运行一个服务
private void scheduleService(){
JobScheduler jobScheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
JobInfo.Builder builder = new JobInfo.Builder(1, new ComponentName(this, TestJobService.class)); //指定哪个JobService执行操作
jobScheduler.schedule(builder.build());
}
}
AndroidManifest.xml
<service android:name=".TestJobService"
android:permission="android.permission.BIND_JOB_SERVICE"/>
需要注意的是JobService
不适合做与前台有交互的任务,双方没有办法互传数据(使用BroadcastReceiver
之类的除外)。不过传递给JobService
倒是可以