文章目录

  • 应用层常用保活方式
  • 基于JobService保活开发

应用层常用保活方式

  1. 一个像素activity播放无声音乐
  2. 前台Service
  3. 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应用开发实战-保活组件相关推荐

  1. Android项目开发实战常用知识点

    Android项目开发实战常用知识点 一:启动页延时两秒再跳转到主界面: //执行类 private class SlpashRunnable implements Runnable {@Overri ...

  2. 《Android Studio开发实战》学习(一)- Hello World

    <Android Studio开发实战>学习(一)- Hello World 背景 Android Studio的安装 Android Studio的启动和运行 运行小应用Hello Wo ...

  3. 《Android Studio开发实战 从零基础到App上线(第3版)》出版后记

    2018年11月,经过熬夜写作的<Android Studio开发实战 从零基础到App上线(第2版)>正式出版面世.承蒙众多读者的厚爱,第2版的图书在此后的三年多时间,一直保持在移动开发 ...

  4. Android NFC开发实战详解

    Android NFC开发实战详解 Android开发实战详解NFC国内第一本AndroidNFC开发书籍带你开启AndroidNFC开发的神秘之旅大综合案例帮助读者快速进入实战角色:WiFi快速连接 ...

  5. 《Android Studio开发实战 从零基础到App上线(第2版)》出版后记

    2015年11月23日,鄙人在csdn发表了第一篇技术文章,掐指一算距今已有三年.遥想当年开写博客,只是为了总结经验同时分享出来,后来机缘巧合受到出版社编辑邀请并出了书,完全是无心插柳的结果.当初写作 ...

  6. 《Android Studio开发实战 从零基础到App上线》源码运行问题解答

    本书提供了所有章节的完整源码下载,自上市以来陆续收到读者的意见反馈,现将与源码有关的问题汇总归类如下,方便更多的朋友解决源码运行过程中发现的问题: 一.打开本书源码时,出现"Plugin w ...

  7. 《Android Studio开发实战》学习(五) - 截图

    <Android Studio开发实战>学习(五) - 截图 背景 页面布局 布局文件的编写 代码文件的编写 ImageView控件截图的原理 运行结果 背景 在这里继续学习Android ...

  8. 《Android Studio开发实战》学习(二)- 聊天室

    <Android Studio开发实战>学习(二)- 聊天室 背景 聊天室布局文件的编写 聊天室代码文件的编写 运行结果 背景 在前一篇文章 1中实现了使用Android Studio开发 ...

  9. 《Android Studio开发实战 从零基础到App上线》第一版的资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线>(第一版)一书用到的工具和代码资源: 1.本书使用的Android Studio版本为2.2.3,因为Andr ...

最新文章

  1. 有这个OCR程序,不用再买VIP了,Python 调用百度OCR API
  2. (十一)linux之poll轮询
  3. Day9 深度学习入门
  4. matlab 求向量的交集_MATLAB矩阵列向量单位化的最快代码
  5. SpiceWorks:企业接纳Windows 10的增速是Windows 7的两倍
  6. Python判断一个数是否为质数
  7. 链家上海2018年9月二手房
  8. 计算机登录界面没有用户显示不出来,笔记本电脑登录页面不显示 怎么解决
  9. 加拿大卡尔加里推出数字货币以促进当地经济发展
  10. logo一键制作器源码
  11. python写一个数字字典生成器
  12. 蓝湖访问显示“加载遇到问题”
  13. kafka添加安全验证配置
  14. 监控摄像头进行网页直播
  15. 24.请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。
  16. C# Chart 波形显示,动态数据滑动显示方法
  17. python 期货现货差价监测_现货价格和期货价格的关系怎么看?
  18. python开发飞机小游戏_Python开发的飞机打外星人小游戏
  19. 标签体系及应用方法论,一文读懂
  20. Spring事务管理案例

热门文章

  1. 淘宝人生3周年,聊聊我们3D互动游戏的项目经验
  2. rm——删除文件、文件夹
  3. jquery和vue分别对input输入框手机号码格式化(344)
  4. 学计算机学体育生闺女,适合女孩学的体育项目
  5. 程序员薪水最高的25家公司
  6. java实现的一个发送手机短信
  7. docker容器不阻塞的进入
  8. 阿里钉钉技术分享:企业级IM王者——钉钉在后端架构上的过人之处
  9. 宏旺半导体为你解释手机内存不够用的原因
  10. 安装esxi6.X系统过程