博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android源码分析之 JobScheduler
阅读量:5789 次
发布时间:2019-06-18

本文共 2122 字,大约阅读时间需要 7 分钟。

5.0API以后用的JobScheduler 5.0API之前用GCM---谷歌的Google Play ServiceManager,国内基本是废的。(里面有很多的网络优化的代码--包括访问策略等)

package com.nan.batterydemo;

import android.annotation.TargetApi; import android.app.AlarmManager; import android.app.PendingIntent; import android.app.job.JobInfo; import android.app.job.JobScheduler; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.os.BatteryManager; import android.os.Build; import android.os.Bundle; import android.os.PowerManager; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.WindowManager;

import java.util.List;

@TargetApi(21) public class MainActivity extends AppCompatActivity {

private static final String TAG = MainActivity.class.getSimpleName();@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    ComponentName serviceComponent = new ComponentName(this, MyJobService.class);    //频繁地唤醒    JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);    for (int i = 0; i < 500; i++) {        JobInfo jobInfo = new JobInfo.Builder(i, serviceComponent)                .setMinimumLatency(5000)//最小延时5秒                .setOverrideDeadline(60000)//最多执行时间60秒复制代码

// .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)//免费的网络---wifi 蓝牙 USB .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)//任意网络---wifi //设置重试(退避)策略:当一个任务失败的时候,采取什么重试策略 //第一次尝试重试的等待时间间隔 .setBackoffCriteria(JobInfo.DEFAULT_INITIAL_BACKOFF_MILLIS, JobInfo.BACKOFF_POLICY_LINEAR) //设置设备重启以后,这个任务是否还需要保留 //.setPeriodic() // //.setPersisted() .build(); jobScheduler.schedule(jobInfo);

//取消job,如果任务已经正在执行了是不能取消的        jobScheduler.cancel(1);        //取消所有job        jobScheduler.cancelAll();        //获取该进程里面所有等待的任务        List
allPendingJobs = jobScheduler.getAllPendingJobs(); }}复制代码

}

转载地址:http://yemyx.baihongyu.com/

你可能感兴趣的文章
DICOM简介
查看>>
Scrum之 Sprint计划会议
查看>>
List<T> to DataTable
查看>>
[Java]Socket和ServerSocket学习笔记
查看>>
stupid soso spider
查看>>
svn命令在linux下的使用
查看>>
There is insufficient system memory to run this query 错误
查看>>
基于ARM-contexA9-Linux驱动开发:如何获取板子上独有的ID号
查看>>
我们奋斗着并将持续奋斗 ----暨清华D-Lab创新基地揭牌仪式
查看>>
MySQL主从同步相关-主从多久的延迟?
查看>>
【MyBatis框架】MyBatis入门程序第二部分
查看>>
一分钟了解阿里云产品:网络安全专家服务
查看>>
自定义View以及事件分发总结
查看>>
人生第一个过万 Star 的 GitHub 项目诞生
查看>>
Mac下配置多个SSH-Key (gitLab)
查看>>
Gradle之module间依赖版本同步
查看>>
一些kindle资源
查看>>
Node第一天
查看>>
【开源】多多客发布 3.0.0-alpha.6,Koa+Vue+Taro最佳实践
查看>>
页面搭建工具总结及扩展架构思考
查看>>