Android应用开发实战-保活组件
文章目录
- 应用层常用保活方式
- 基于JobService保活开发
应用层常用保活方式
- 一个像素activity播放无声音乐
- 前台Service
- JobService
基于JobService保活开发
新建 lib_pullalive
module
/*** 一个轻量的后台job service,利用空闲时间执行一些小事情,提高进程不被回收的概率*/
@TargetApi(value = Build.VERSION_CODES.LOLLIPOP)
public class AliveJobService extends JobService {private static final String TAG = AliveJobService.class.getName();private JobScheduler mJobScheduler;private Handler mJobHandler = new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(Message msg) {Log.d(TAG, "pull alive.");jobFinished((JobParameters) msg.obj, false);return true;}});public static void start(Context context) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {Intent intent = new Intent(context, AliveJobService.class);context.startService(intent);}}@Overridepublic void onCreate() {super.onCreate();mJobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {JobInfo job = initJobInfo(startId);if (mJobScheduler.schedule(job) <= 0) {Log.d(TAG, "AliveJobService failed");} else {Log.d(TAG, "AliveJobService success");}return START_STICKY;}//开始任务@Overridepublic boolean onStartJob(JobParameters params) {mJobHandler.sendMessage(Message.obtain(mJobHandler, 1, params));return true;}//结束任务@Overridepublic boolean onStopJob(JobParameters params) {mJobHandler.sendEmptyMessage(1);return false;}//执行条件private JobInfo initJobInfo(int startId) {JobInfo.Builder builder = new JobInfo.Builder(startId,new ComponentName(getPackageName(), AliveJobService.class.getName()));if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {builder.setMinimumLatency(JobInfo.DEFAULT_INITIAL_BACKOFF_MILLIS); //执行的最小延迟时间builder.setOverrideDeadline(JobInfo.DEFAULT_INITIAL_BACKOFF_MILLIS); //执行的最长延时时间builder.setBackoffCriteria(JobInfo.DEFAULT_INITIAL_BACKOFF_MILLIS,JobInfo.BACKOFF_POLICY_LINEAR);//线性重试方案} else {builder.setPeriodic(JobInfo.DEFAULT_INITIAL_BACKOFF_MILLIS);}builder.setPersisted(false);builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE);builder.setRequiresCharging(false);return builder.build();}
}
<applicationandroid:allowBackup="true"android:label="@string/app_name"><serviceandroid:name=".AliveJobService"android:exported="true"android:permission="android.permission.BIND_JOB_SERVICE" /></application>
使用:
导入保活库
//保活库implementation project(':lib_pullalive')
在启动页的onCreate方法中添加以下方法
private void pullAliveService() {AliveJobService.start(this);}
Android应用开发实战-保活组件相关推荐
- Android项目开发实战常用知识点
Android项目开发实战常用知识点 一:启动页延时两秒再跳转到主界面: //执行类 private class SlpashRunnable implements Runnable {@Overri ...
- 《Android Studio开发实战》学习(一)- Hello World
<Android Studio开发实战>学习(一)- Hello World 背景 Android Studio的安装 Android Studio的启动和运行 运行小应用Hello Wo ...
- 《Android Studio开发实战 从零基础到App上线(第3版)》出版后记
2018年11月,经过熬夜写作的<Android Studio开发实战 从零基础到App上线(第2版)>正式出版面世.承蒙众多读者的厚爱,第2版的图书在此后的三年多时间,一直保持在移动开发 ...
- Android NFC开发实战详解
Android NFC开发实战详解 Android开发实战详解NFC国内第一本AndroidNFC开发书籍带你开启AndroidNFC开发的神秘之旅大综合案例帮助读者快速进入实战角色:WiFi快速连接 ...
- 《Android Studio开发实战 从零基础到App上线(第2版)》出版后记
2015年11月23日,鄙人在csdn发表了第一篇技术文章,掐指一算距今已有三年.遥想当年开写博客,只是为了总结经验同时分享出来,后来机缘巧合受到出版社编辑邀请并出了书,完全是无心插柳的结果.当初写作 ...
- 《Android Studio开发实战 从零基础到App上线》源码运行问题解答
本书提供了所有章节的完整源码下载,自上市以来陆续收到读者的意见反馈,现将与源码有关的问题汇总归类如下,方便更多的朋友解决源码运行过程中发现的问题: 一.打开本书源码时,出现"Plugin w ...
- 《Android Studio开发实战》学习(五) - 截图
<Android Studio开发实战>学习(五) - 截图 背景 页面布局 布局文件的编写 代码文件的编写 ImageView控件截图的原理 运行结果 背景 在这里继续学习Android ...
- 《Android Studio开发实战》学习(二)- 聊天室
<Android Studio开发实战>学习(二)- 聊天室 背景 聊天室布局文件的编写 聊天室代码文件的编写 运行结果 背景 在前一篇文章 1中实现了使用Android Studio开发 ...
- 《Android Studio开发实战 从零基础到App上线》第一版的资源下载和内容勘误
资源下载 下面是<Android Studio开发实战 从零基础到App上线>(第一版)一书用到的工具和代码资源: 1.本书使用的Android Studio版本为2.2.3,因为Andr ...
最新文章
- 有这个OCR程序,不用再买VIP了,Python 调用百度OCR API
- (十一)linux之poll轮询
- Day9 深度学习入门
- matlab 求向量的交集_MATLAB矩阵列向量单位化的最快代码
- SpiceWorks:企业接纳Windows 10的增速是Windows 7的两倍
- Python判断一个数是否为质数
- 链家上海2018年9月二手房
- 计算机登录界面没有用户显示不出来,笔记本电脑登录页面不显示 怎么解决
- 加拿大卡尔加里推出数字货币以促进当地经济发展
- logo一键制作器源码
- python写一个数字字典生成器
- 蓝湖访问显示“加载遇到问题”
- kafka添加安全验证配置
- 监控摄像头进行网页直播
- 24.请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。
- C# Chart 波形显示,动态数据滑动显示方法
- python 期货现货差价监测_现货价格和期货价格的关系怎么看?
- python开发飞机小游戏_Python开发的飞机打外星人小游戏
- 标签体系及应用方法论,一文读懂
- Spring事务管理案例