使用JobService做进程保活

WorkManager之SystemJobScheduler、SystemAlarmScheduler、GreedyScheduler三大调度器,源码流程详细解读 SystemJobScheduler的工作过程 先看其构造方法,它会将我们传递进来的WorkManagerImpl 与context进行保存,并在它的重载方法里获取了系统服务jobScheduler,要了解jobScheduler,推荐一篇博文可以看看JobScheduler的使用, 而另外一个参数SystemJobInfoConverter 则是用来将我们的workSpecs转化为JobInfo,这个JobInfo是jobScheduler需要的参数 ,用来描述任务的执行时间,条件,策略等一系列的行为。因 阅读详情

好多企业都想让自己的进程持续在后台运行,其实现在这样的需求根本实现不了了,手机自带的清后台功能基本上能清理掉所有的后台进程,除非我们的应用是系统级别的应用。

这里要说的进程保活,是当手机中的应用开的太多的时候,系统进行自动清理进程的时候,我们的应用能够不被清理,或者清理掉之后能够自动重启。

什么是JobService

JobService也是一个service,和普通的service不同的是,JobService是一个任务回调类,通过JobScheduler设置任务给系统,系统来调用JobService中的方法,具体处理什么任务需要我们自己在JobService中的回调方法中实现。那么关于任务的管理和进程的维护、调度当然是由系统来统一管理。

使用方法

创建一个service类继承JobService
public class GuardJobService extends JobService {
    @Override
    public boolean onStartJob(JobParameters params) {
        Log.e("service","GuardJobService--onStartJob");
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        Log.e("service","GuardJobService--onStopJob");
        return false;
    }
}

第一个方法表示开始工作,第二个是停止工作,JobService只是JobScheduler的回调类,开始工作方法和停止工作方法都是系统来调用的,我们通过JobScheduler类来设置开始工作的条件,当条件符合的时候系统会调用JobService中的方法来开始工作。

开始工作的条件
public void setJobInfo(){
        JobInfo.Builder ex = new JobInfo.Builder(1, new ComponentName(this.getPackageName(), GuardJobService.class.getName()));

        ex.setPeriodic(500L);                                 //设置执行间隔时间
        //ex.setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE); //设置需要的网络环境
        //ex.setMinimumLatency(3000);                            // 设置任务运行最少延迟时间
        //ex.setRequiresCharging(true);                         //设置是否在充电的时候执行

         jobScheduler = (JobScheduler)this.getSystemService(Context.JOB_SCHEDULER_SERVICE);
        int ret = jobScheduler.schedule(ex.build());  //设置给JobScheduler

        Log.e("service","GuardJobService--getJobInfo -- ret::" + ret);
}

最后调用schedule方法,我们就把设置好的开始工作的条件设置给系统,当满足我们设置的条件的时候,系统就会去回调JobService中的onStartJob方法。

注意:onStartJob这个回答方法是运行在主线程的。

然后在JobService中调用这个方法,设置给系统。

@Override
public void onCreate() {
    super.onCreate();
    getJobInfo();
    Log.e("service","GuardJobService--onCreate");
}
在清单文件中注册Service
 <service
   android:name=".GuardJobService"
   android:exported="true"
   android:permission="android.permission.BIND_JOB_SERVICE"
   android:process=":guard" />

为了实现进行的保活,我把JobService单独放到一个进程中。

到此JobService就配置好了,下面创建一个Service,在这个服务中开启JobService

public class TestService extends Service{

    @Override
    public void onCreate() {
        super.onCreate();
        Log.e("service","TestService--onCreate");

        Intent ret = new Intent(TestService.this, GuardJobService.class);
        startService(ret);
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.e("service","TestService-- onStartCommand");
        return super.onStartCommand(intent, flags, startId);
    }
}

下面开始测试,在TestService中开启GuardJobService,看我们打印的日志,然后通过adb杀进程来测试进程能不能重启,当然得使用root的手机来测试。

直接开启JobService
/com.test.testapp E/service: TestService--onCreate
/com.test.testapp E/service: TestService-- onStartCommand
/com.test.testapp:guard E/service: GuardJobService--getJobInfo -- ret::1
/com.test.testapp:guard E/service: GuardJobService--onCreate
/com.test.testapp:guard E/service: GuardJobService--onStartCommand

首先走到TestService的onCreate和OnStartCommand方法,然后进入JobService中的OnCreate方法和OnStartCommand方法。通过日志可以看到有两个进程,一个com.test.testapp,一个com.test.testapp:guard

杀死进程com.test.safe

杀死com.test.safe进程以后,发现该进程马上就重启了,并打印下面的日志

/com.test.testapp E/service: TestService--onCreate
/com.test.testapp:guard E/service: GuardJobService--onStartCommand
/com.test.testapp E/service: TestService-- onStartCommand

说明TestService被重启了,走了onCreate和onStartCommand方法,因为JobService本来就存在,所以再次开启这个服务的时候只会走onStartCommand方法。

杀死进程com.test.testapp:guard

发现被杀死的guard进程也被快速重启,打印日志如下:

/com.test.testapp:guard E/service: GuardJobService--getJobInfo -- ret::1
/com.test.testapp:guard E/service: GuardJobService--onCreate
/com.test.testapp:guard E/service: GuardJobService--onStartCommand

发现进程重启走了JobService的onCreate和onStartCommand方法

总结

测试结果表明,调用了JobService以后,当所在的进程被杀死的时候就会被系统调起,具体原因是我感觉是因为JobService的任务是由系统来维护的,当还有任务没有完成的时候系统会调起所在的进程,而我们设置的条件是每500毫米执行一次任务,其他的条件都没有设置,而我们在onStartJob和onStopJob方法中返回false,而且没有代码需要执行,表示我们没有任务需要执行,直接告诉系统任务执行完毕,所以系统就会每隔500毫米执行一次任务,调起一下进程。

当然,原因都是我通过官方的接口说明推测的,并没有通过源码去详细分析,但是总之,使用JobService做到了进程的保活。如果在保险一点,可以在JobService的onCeate方法中添加启动TestService的方法。

测试代码地址:https://github.com/staticzh/JobService

欢迎关注我的微信公众号,我会把一些生活的感想和投资方面的总结写到公众号,希望你能来和我一起交流技术之外的东西。

<

 张鹤的公众号

JobService的使用及源码分析 Google在Android 5.0中引入JobScheduler来执行一些需要满足特定条件但不紧急的后台任务,APP利用JobScheduler来执行这些特殊的后台任务时来减少电量的消耗。本文首先介绍JobSerice的使用方法,然后分析JobService的源码实现。 JobService的使用 使用JobScheduler的时候需要把待执行的后台任务封装到JobService中提交。下面 阅读详情

相关推荐

Android 8.0+ 后台限制下,用JobScheduler实现进程保活的完整避坑指南

本文深入解析Android 8.0+后台限制下如何利用JobScheduler实现合规的进程保活方案。从JobScheduler核心机制、版本兼容性处理到高级调度策略,提供完整的避坑指南和实战代码示例,帮助开发者在严格的后台限制环境中保持应用功能稳定运行。

weixin_30596735的博客 388

JobService的使用介绍

JobService是Android L时候官方加入的组件。适用于需要特定条件下才执行后台任务的场景。由系统统一管理和调度,在特定场景下使用JobService更加灵活和省心,相当于是Service的加强或者优化。

allisonchen的专栏 2万+

Android JobService和JobScheduler 原理剖析

请支持原创~~ 版本基于:Android R 前言 最近在研究Iorap 的时候碰到了JobScheduler,这套机制是在Android L中就提出来的,而之前没有使用到也就不知其存在。简单过滤了下framework 的代码,发现虽然是一个小模块,却是五脏俱全、环环相扣。由于时间原因,本文主要结合实际情形简单分析JobScheduler 的实现过程。 框架图 本图来源:https://blog.youkuaiyun.com/allisonchen/article/details/792...

私房菜 4340

JobService与JobIntentService

JobService和JobIntentSerice是为了在程序关闭后仍然继续执行而创造的。 JobService与JobIntentService的关系类似于Service与IntentService的关系。JobService是在主线程中运行的,而JobIntentService会为每一次启动都准备一个子线程并在其中运行。 Service与InentService会因为App的停运而中止,而JobService与IntentService在App停运后会继续运行。

m0_57150356的博客 1533

ILI9488 TFT屏驱动与触摸协同开发指南

TFT-LCD显示模块是嵌入式人机交互系统的核心外设,其工作原理依赖于专用显示控制器(如ILI9488)对GRAM显存的精确读写,并通过SPI等串行总线接收指令与图像数据。理解RGB接口时序、寄存器初始化流程及DC/CS信号控制逻辑,是实现稳定显示的基础技术前提;而四线电阻式触摸功能则需配合XPT2046类ADC控制器,通过独立SPI或模拟时序完成坐标采集。该方案兼顾低功耗、高集成与工程可移植性,广泛应用于工业HMI、仪器仪表及STM32F407等MCU平台的教学与产品开发。本文围绕3.5英寸320×480

weixin_33814090的博客 149

日前日内多阶段多时间尺度源荷储协调调度(matlab代码)

多阶段多时间尺度的协调调度的优势是考虑新能源出力的波 动性与随机性,需求响应负荷的不确定性会对电网制定的日前调度计划准确性造成影响,也就是能够更加精准的进行调度和分析,优化结果的可用性更强。在这方面论文里面,金力的《考虑特性分布的储能电站接入的电网多时间尺度源储荷协调调度策略》就考虑了日前日内实时三个阶段调度,每个阶段考虑了不同负荷需求响应策略,同时考虑了负荷波动性的影响,具有很强的参考意义。 目录 一、模型 二、程序运行 三、程序链接 一、模型 负荷需求响应考虑电价型和激励型两种,电.

zhangxd212489的博客 7915

Android--使用JobService实现进程保活

进程保活一直是广大APP开发者所希望的,因为进程活着我们就可以操作很多事情(推送,数据同步等等),但是google大大是不允许这样做的(优化),所以我们要另辟蹊径。 先来看看android中有几种进程吧。 前台进程:Foreground process 用户正在交互的Activity(onResume()) 当某个Service绑定正在交互的Activit...

weixin_30318645的博客 427

【课程设计】TCP/IP 应用环境中服务器的部署与实现

本项目旨在通过搭建一个虚拟网络环境,实现软路由系统的配置和服务器的搭建与测试。具体包括安装虚拟机 VMWare Workstation,安装 Windows Server 2003 操作系统,配置软路由系统(包括双网卡安装、协议配置和测试),以及搭建并测试 DHCP 服务、DNS 服务、WWW 服务、FTP 服务和 SMTP/POP3 服务。

weixin_74907236的博客 1524

android服务保活jobserver,Android--使用JobService实现进程保活

@SuppressLint("NewApi")public class JobHandleService extendsJobService {private int kJobId = 0;@Overridepublic voidonCreate() {super.onCreate();Log.i("INFO", "jobService create");}@Overridepublic int ...

weixin_29331115的博客 660

KEIL-MDK代码美化神器:AStyle配置全攻略(附常用参数详解)

本文详细介绍了如何在KEIL-MDK中配置和使用AStyle代码格式化工具,包括基础参数设置、高级格式控制、团队协作方案以及KEIL深度集成技巧。通过合理的AStyle配置,开发者可以显著提升代码风格一致性,优化团队协作效率,特别适合嵌入式开发项目。

weixin_30505225的博客 146

SAGA GIS英文版进行地形分析,计算常用的地形因子等

SAGA GIS中文版是一款专业的自动化地球科学分析系统软件。SAGA GIS最新版界面简洁,操作简便,用户使用时输入要分割的影像,选择要计算特征的影像或者波段,设置越大,得到的斑块越大;反之,则越小,点击Okay,得到分割影像图。SAGA GIS中文版主要通过选择适合你影像的格式,加载影像。 SAGA GIS全称是System for Automated Geoscientific Analyses,是一种用于编辑空间数据的地理信息系统(GIS)计算机程序,它是免费的开源软件,SAGA GIS旨在为科学家

qq_35794085的博客 5645

【Android 进程保活】应用进程拉活 ( JobScheduler 拉活 | JobScheduler 使用流程 | JobService 服务 | 不同版本兼容 | 源码资源 )

一、 JobScheduler 用法简介、 二、 JobScheduler 拉活完整代码、 1、 JobService、 2、清单文件、 3、启动 JobScheduler 任务、 4、运行效果、 三、 源码资源、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 4020

Unity分包下载实战:AssetBundle+CDN+热更新全链路指南

分包下载是移动应用资源管理的核心技术,本质是将大体积安装包拆解为按需加载的独立资源单元,以解决用户安装意愿低、首屏启动慢、热更新不可控等关键问题。其底层依赖资源打包机制(如Unity AssetBundle)、全球分发网络(CDN)与安全热更新策略三者协同。AssetBundle提供资源隔离与依赖管理能力,CDN保障低延迟高可用下载,而热更新策略则决定版本控制、灰度发布与异常恢复的工程鲁棒性。该方案广泛应用于中重度游戏、大型工具类App及需要频繁内容迭代的商业项目,直接提升次日留存、过审成功率与用户在线时长

weixin_29762151的博客 355

Android Service保活方法总结(不被杀死)双进程守护

写在前头 保活Service我们需要做什么: 1.在应用被关闭后保活(最难) 2.在内用占用过大,系统自动释放内存时保活(优先杀死占用较高的Service) 3.重启手机后自动开启Service 4.手机息屏后不被释放内存 5.手动清理内存时保活 首先介绍一下Service的等级: 一、前台进程 二、可见进程 三、服务进程 四、后台进程 五、空进程 ---关闭应用后,...

Seven丶Echo的博客 5万+

批量读取_MCGS触摸屏如何实现批量读取modbus数据的方法?

前两天,在一个QQ群里,有同行的朋友问,在MCGS中如何实现批量读取数据,因为他当时面临设备,通讯协议才是MODBUS RTU,同时厂家说地址不能分开读,必须是连续的。鉴于他提供的消息是能够设置的地方都试过了。为此,我直接告诉通过脚本,批量读取的方案。那么这个方案究竟如何实现?且看我下面慢慢道来。一、工具1.modsim:仿真PLC或者第三方设备。2.MCGS组态软件3.串口软件:在电脑中生成两不...

weixin_32511509的博客 8161

RAP 值帮助实战:用 CDS 注解把 Fiori Elements 的输入体验做得又快又准

本文系统介绍了如何在SAP RAP应用中实现高效的值帮助(Value Help)功能。通过复用标准CDS View和自定义View Entity,开发者可以快速为字段添加弹窗选择、搜索和下拉框功能。文章详细讲解了三种核心实现方式:复用标准值帮助CDS View实现快速集成;构建自定义View Entity支持企业特定编码;利用搜索注解(@Search)和下拉框注解(@ObjectModel)优化用户体验。特别强调了文本显示、模糊搜索和小结果集下拉等实用技巧,并提供了可直接复用的国家代码值帮助示例。这些方法能

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 6466

android保活进程总结--双进程保活策略

进程的保活,在很多资讯类的App和即时通讯App的用处很大,奈何谷歌的推送服务在国内是被阉割了!据说是在8.0(奥利奥)相关政府机构已经将开放这项功能提上了日程,嗯,没错8.0,预计再过三五年就可以像苹果那样自由自在的推送了!但是一点不鸡冻,不知道我这秃头的码农还能不能挨到,哈哈!先看看效果图:这张图片的主要操作是杀死后台所有的应用进程,之后在状态栏上面弹出被拉起来的程!测试机参数:service:

T-chuangxin 4639

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android进程保活

1.JobService 使用JobService做进程保活_安新小子的博客-优快云博客_jobservice好多企业都想让自己的进程持续在后台运行,其实现在这样的需求根本实现不了了,手机自带的清后台功能基本上能清理掉所有的后台进程,除非我们的应用是系统级别的应用。这里要说的进程保活,是当手机中的应用开的太多的时候,系统进行自动清理进程的时候,我们的应用能够不被清理,或者清理掉之后能够自动重启。什么是JobServiceJobService也是一个service,和普通的service不同的是,Jo..

Luka的異想世界 957

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JobService 和 JobScheduler Android5.0以上的进程保活

JobService 和 JobScheduler Android5.0以上的进程保活Android 5.0 新增了一个 JobScheduler API,允许您定义一些系统在稍后或指定条件下(如设备充电时)以异步方式运行的作业,从而优化电池寿命。

desireyao的专栏 2162

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Andrioid进程保护

这篇博文主要是关于进程保活的应用,通过对网上各种进程保活方式的学习,自己理解后做汇总、优化、简单封装。进程保活,主要就为了加强你写的app在手机上的生存能力,降低被手机干掉的几率。当然,如果想要完全保证app不被杀死,那是不可能的(因为就是你再厉害,也厉害不过手机厂商),所以只能是尽量提高app的存活几率。下面将通过‘AIDL +JobS

z_zhaojun的博客 2391

android进程保活总结

最近在做一个需要进程保活的项目,所以来总结一下。 这里给出了我的进程保活方法和一些技巧,最后附源码 主要步骤如下: 总体来说就是5.0以下开启定时器来启动Service,5.0以上开启JobService来开启Service。 然后监听系统的锁屏和解锁广播,来开启一个1像素的Activity。 监听系统的开机广播或第三方推送广播来启动Service。 对与我们的Service开启一个通...

qq_34435022的博客 565

JobScheduler布置后台任务以及实现进程保活?

1.简介   在Android 5.0 提供了一套新的JobSchedulerAPI,它允许您定义要在以后的某个时间或在指定的条件下(例如,当设备在充电时)异步运行的作业来优化电池寿命。   https://developer.android.com/reference/android/app/job/package-summary   https://developer.an...

banyinlve3147的博客 946

Android 进程保活:应用进程拉活教程及源码资源

Android 进程保活:应用进程拉活教程及源码资源 去发现同类优质开源项目:https://gitcode.com/ 此压缩文件包含了一篇详尽的Android进程保活教程,以及相关的源码资源。主要内容包括: JobScheduler的使用流程介绍 JobService服务的实现细节 针对不同Android版本的兼容性处理 通过本教程的学习和实践,您将能够掌握如何有效地利用JobSchedul...

gitblog_06725的博客 922

Android进程保活应用进程拉活教程及源码资源:进程稳定运行的艺术

Android进程保活应用进程拉活教程及源码资源:进程稳定运行的艺术 去发现同类优质开源项目:https://gitcode.com/ 在移动应用开发领域,Android进程保活一直是开发者关注的焦点。应用的稳定性直接关系到用户体验,而进程的频繁被杀可能导致功能故障,影响用户的使用感受。今天,我们就来介绍一款开源项目——Android进程保活应用进程拉活教程及源码资源,帮助开发者解决这一难题。 项...

gitblog_06717的博客 616

Android 系统(274)---Anroid5.0以上进程保活方案(亲测可自行调起被杀死的app)

Anroid5.0以上进程保活方案(亲测可自行调起被杀死的app)   实验了几种最后选择了2中组合 第一种 开启一像素activity保活,如果2个activity同时被杀死则此方案不可选。 第二种 发送null的notification 提高进程优先级像酷狗音乐的通知栏一样  强制推出还是被杀死 第三种 jobservice  jobsheduler 的使用native来唤醒 ...

zhangbijun1230的专栏 656

Android 进程保活

原文地址:http://blog.youkuaiyun.com/marswin89/article/details/50917098

dodod2012的专栏 504
上一篇: Launcher的相关知识
下一篇: Python中的数据类型
安新小子
博客等级 码龄10年 39粉丝 58原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值