使用Android JobScheduler优雅的处理后台数据

本文介绍了Android JobScheduler的使用,它适用于在特定条件(如充电、网络连接)下执行后台任务,以节省电量。文章详细阐述了JobScheduler的引入背景、应用场景和优势,并提供了创建JobService、配置JobInfo及启动服务的步骤。通过官方Demo和实例代码,帮助开发者理解和运用JobScheduler,以更优雅的方式管理后台数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是JobScheduler

老习惯,先附上API文档,API才是最权威的指导(不翻墙也可以正常访问)。

https://developer.android.google.cn/reference/android/app/job/JobScheduler.html

官方demo git地址:

https://github.com/googlesamples/android-JobScheduler

一.简介

JobScheduler来自API level 21,是5.0新出的一种后台数据处理模式,

在Android 7.0的新特性中,Google对于新设备功耗要求越来越严格,对于APP的限制也越来越多。

详情可以看我的另外一篇翻译Android7.0新特性:

(简书)
http://www.jianshu.com/p/822699607bc2

(CSDN)
http://blog.csdn.net/aroundme/article/details/55002563

在第六点介绍使用Svelte项目优化后台的时候,提到了推荐使用JobScheduler来是吸纳调度作业,
并且希望将来所有应用都使用它来实现。

(然而对于国内市场情况来说并没有什么卵用)

二.应用场景

当你需要在Android设备满足某种场合才需要去执行处理数据,例如
* 应用具有您可以推迟的非面向用户的工作(定期数据库数据更新)
* 应用具有当插入设备时您希望优先执行的工作(充电时才希望执行的工作备份数据)
* 需要访问网络或 Wi-Fi 连接的任务(如向服务器拉取内置数据)
* 希望作为一个批次定期运行的许多任务

而使用JobScheduler可以很优雅的完成这些情况。

所以相比于其他方式,JobScheduler的好处是显而易见的。
* 避免频繁的唤醒硬件模块,造成不必要的电量消耗。
* 避免在不合适的时间(例如低电量情况下、弱网络或者移动网络情况下的)执行过多的任务消耗电量;

JobScheduler和Android 6.0出现的Doze都一样,总结来说就是限制应用频繁唤醒硬件,从而达到省电的效果。

然而心痛的是搜索引擎的结果:


作为一个开发者我也不想多说什么。

三.使用

大概介绍完之后,重点是如何使用JobScheduler来实现我们需要的功能。

1.创建JobService

首先需要自定义一个类来继承JobService,但是因为JobScheduler是要运行在API>21的情况下的,你需要设置点东西。

  1. 在build.gradle中设置minSdkVersion为21,但是这样太鸡肋了,难道还5.0以下都不匹配吗
  2. 使用注解不同版本采取不同策略,保证兼容。

重写onStartJob(JobParameters params) 和onStopJob(JobParameters params)方法。

public class JobSchedulerService extends JobService {
   

    @Override
    public boolean onStartJob(JobParameters params) {

        return false;
    }

    @Override
    public boolean onStopJob(JobParameters params) {

        return false;
    }
}

2.Activity中配置JobInfo

JobInfo是控制任务执行的方式,包括时间,延时,状态选择等。

具体API:https://developer.android.google.cn/reference/android/app/job/JobInfo.html

如果不想看可以看Demo中我使用中文注释应该稍微好理解点。

3.开启MyJobService

在官方Demo中,在onStart()方法中开启了Intent注册了这个JobScheduler。
然后就可以愉快的调用API玩耍了。

推荐运行官方的Demo,简单易懂

具体运行推荐下载Github上的Demo运行,跑跑看一目了然。

如果偷偷懒可以看看下面的逻辑层代码,已经写上注释能够更好理解。

Activity代码

import android.app.Activity;
import android.app.job.JobInfo;
import android.app.job.JobScheduler;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Messenger;
import android.os.PersistableBundle;
import android.support.annotation.ColorRes;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;

import com.example.android.jobscheduler.service.MyJobService;

import java.lang.ref.WeakReference;
import java.util.List;


/**
 * Schedules and configures jobs to be executed by a {@link JobScheduler}.
 * <p>
 * {@link MyJobService} can send messages to this via a {@link Messenger}
 * that is sent in the Intent that starts the Service.
 *
 *
 * 计划和配置要由{@link JobScheduler}执行的作业。
 *
 * {@link MyJobService}可以通过{@link Messenger}向其发送消息
 * 在启动服务的Intent中发送。
 */
public class MainActivity extends Activity {
   

    private static final String TAG = MainActivity.class.getSimpleName();
    //消息
    public static 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值