全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android省电的秘密之JobScheduler

JobScheduler是Android L版本新引入的API,JobScheduler,顾名思义,是用来调度工作。工作被调度的条件包括网络变化,充电插拔,周期执行等。使用场景包括wifi条件下数据下载上传等等。谷歌为什么要引入这个新的API呢?是为了省电而制定的一种规范。想想如果每个开发者都利用这个API进行wifi网络下数据上传,数据上传的操作将会被统一到同一个时间点,批量处理,这样比许多应用单独唤醒要省电的多。

下面展示一个小例子

主MainActivity

builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED); 代表免费的网络,通常就是指wifi了

public class MainActivity extends Activity {
 JobScheduler js;
 JobInfo.Builder builder;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  js=(JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
  builder=new Builder(1, new ComponentName(this, DemoService.class));
  builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED);
  js.schedule(builder.build());
 }
}

需要被调度的Job

当wifi可用时,这个DemoService 就会执行onStartJob

public class DemoService extends JobService{
 @Override
 public boolean onStartJob(JobParameters params) {
  // TODO Auto-generated method stub
  final JobParameters mJobParameters=params;
  AsyncTask<Void, Void, Void> mTask = new AsyncTask<Void, Void, Void>() {
  @Override
  protected Void doInBackground(Void... params) {
   // TODO Auto-generated method stub
   return null;
  }
  @Override
  protected void onPostExecute(Void result) {
   // TODO Auto-generated method stub
   Toast.makeText(wenfengService.this, "hello", 1000).show();
   jobFinished(mJobParameters, true);
   super.onPostExecute(result);
  }
  };
  mTask.execute();
  return true;
 }
 @Override
 public boolean onStopJob(JobParameters params) {
  // TODO Auto-generated method stub
  Toast.makeText(this, "bye", 1000).show();
  return true;
 }
}

清单

<service
 android:name=".DemoService "
android:permission="android.permission.BIND_JOB_SERVICE"
 android:exported="true"/>

onStartJob.png

onStartJob函数常常有两种场景

1.不耗时的操作,这时你应该返回false

2.耗时的操作例如数据下载等,这是你应该开启一个新线程(因为JobService是跑在主线程的),并且返回true

如果调度是任务执行失败了,怎么办?

任务失败的情况有很多,例如下载失败了,例如下载过程wifi断掉了。

没问题,google提供了方便的重新调度的方法。

例如如果下载过程中,wifi断掉了,JobService会回调onStopJob函数,这是只需要把函数的返回值设置为true就可以了。当wifi重新连接后,JobService会重新回调onStartJob函数。

而如果下载失败了,例如上面的例子中的AsyncTask执行失败,怎么办呢?我们只需要在AsyncTask的onPostExecute中执行jobFinished(mJobParameters, true),这里的true代表任务要在wifi条件重新满足情况下重新调度。经典的写法如下。

开始调度

@Override
public boolean onStartJob(final JobParameters params) {
 mDownloadArtworkTask = new DownloadArtworkTask(this) {
 @Override
 protected void onPostExecute(Boolean success) {
  jobFinished(params, !success);
 }
 };
 mDownloadArtworkTask.execute();
 return true;
}

停止调度

@Override
public boolean onStopJob(final JobParameters params) {
 if (mDownloadArtworkTask != null) {
 mDownloadArtworkTask.cancel(true);
 }
 return true;
}

如果调度的任务老是执行失败,怎么办?

为了省电的考虑,失败的任务在执行条件满足的情况下,要延时一段时间才能执行。而且随着失败次数的增多,延时会越长。举个例子,因为wifi断开而执行失败的任务,在wifi连上后不会马上执行,延时一段时间才能执行。

延时时间=30s*失败次数。

下图是JobScheduler在framework层的时序图,下一章将用adb指令直观查看JobScheduler的情况,不容错过。有问题可以留言哟,大家一起探讨!

JobScheduler内部时序图

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# android  # 省电  # jobscheduler  # Android使用JobScheduler定期推送本地通知实例代码  # Android5.0中JobScheduler的使用方法  # Android JobScheduler详细介绍  # 这是  # 只需  # 要在  # 你应该  # 上传  # 回调  # 失败了  # 情况下  # 就会  # 将会  # 有很多  # 要把  # 顾名思义  # 一到  # 有两种  # 大家一起  # 设置为  # 一章  # 越长 


相关文章: 如何在腾讯云免费申请建站?  如何在建站主机中优化服务器配置?  javascript中的try catch异常捕获机制用法分析  制作农业网站的软件,比较好的农业网站推荐一下?  建站168自助建站系统:快速模板定制与SEO优化指南  香港服务器租用费用高吗?如何避免常见误区?  SQL查询语句优化的实用方法总结  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  如何基于云服务器快速搭建网站及云盘系统?  如何选择靠谱的建站公司加盟品牌?  临沂网站制作企业,临沂第三中学官方网站?  建站之星伪静态规则如何正确配置?  公司门户网站制作流程,华为官网怎么做?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  建站之星后台密码遗忘或太弱?如何重置与强化?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  制作网页的网站有哪些,电脑上怎么做网页?  建站主机解析:虚拟主机配置与服务器选择指南  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  建站主机类型有哪些?如何正确选型  测试制作网站有哪些,测试性取向的权威测试或者网站?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  相册网站制作软件,图片上的网址怎么复制?  如何选择适合PHP云建站的开源框架?  如何用好域名打造高点击率的自主建站?  金*站制作公司有哪些,金华教育集团官网?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  如何快速搭建高效WAP手机网站吸引移动用户?  制作证书网站有哪些,全国城建培训中心证书查询官网?  PHP 500报错的快速解决方法  深圳网站制作平台,深圳市做网站好的公司有哪些?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  如何注册花生壳免费域名并搭建个人网站?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  如何使用Golang安装API文档生成工具_快速生成接口文档  建站之星代理如何优化在线客服效率?  建站主机选哪家性价比最高?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  招商网站制作流程,网站招商广告语?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  活动邀请函制作网站有哪些,活动邀请函文案?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  油猴 教程,油猴搜脚本为什么会网页无法显示?  北京的网站制作公司有哪些,哪个视频网站最好?  Android滚轮选择时间控件使用详解  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。