JobService的使用

文章目录

  • 一、前言
  • 二、初步使用
  • 五、参考链接

一、前言

JobService是用来优化后台进程的一个技术,最早是在API21,也就是Android 5.0的时候提供支持。虽然现在官方推荐使用WorkManager来做后台优化,但是在有些项目上可能还会有人使用这个技术,所以这里进行一个简答的记录,以便可以进行维护。另外就是在Android7.0以后,无法再通过清单文件中注册CONNECTIVITY_ACTION来监听网络状态变化。还有就是如果使用某些定时任务的话,在API19之后使用AlarmManager不一定能保证其时效性,所以也需要使用JobService或者WorkManager来处理。

二、初步使用

JobServiceService的子类,也是对Service的加强,需要与JobSchedulerJobInfo配合使用。对于另外两个的简单理解就是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倒是可以

五、参考链接

  1. Android优化篇——后台优化 - 简书

  2. 后台优化  |  Android 开发者  |  Android Developers

  3. Android秘技之JobService的使用详解-随迹(包含了各个使用参数解释)

  4. JobIntentService  |  Android Developers

你可能感兴趣的:(JetPack,android,java)