Android_常驻进程(杀不死的进程)

Android--进程常驻 网上大致有以下几种方法:1、将Service设置为前台进程2、在service的onStartCommand方法里返回 STATR_STICK3、添加Manifest文件属性值为android:persistent=“true”4、覆写Service的onDestroy方法5、添加广播监听android.intent.action.USER_PRESENT事件以及其他一些可以允许的事件6、服务互相... 阅读详情

                                                                                                  常驻进程

        Android常驻进程,就是要让进程在内存中永远存在,让进程保活,不被杀死。可能这时都会喷,这不是流氓软件吗?刚接触android的时候,我也是认为这是很流氓的做法,可是慢慢发现很多场景(应用),要为用户服务,就必须用到常驻进程,就好像微信,QQ,360安全手机卫士这些现在比较火,比较常用的软件来说,他们都是实现了常驻进程的。所以说,有时候常驻进程在开发中是必须的,比如锁屏应用,就必须在进程中接收锁屏的广播,因此要保证进程常驻,像QQ,微信那些IM类应用,也需要长期在后台维护一个长链接,因此进程常驻又是必须的!

        因为最近开发的应用需要用到常驻进程,因此一开始的猜想在java层是不能解决的,必须得在native解决,可是现在对linux和android系统理解还不够深入,而且ndk开发才刚入门,因此在网上搜了一大堆资料,总得来说,给出的解决方法不就外乎下面的几种:

1、将Service设置为前台进程
       相关资料和Demo可以查看之前的博客:http://blog.youkuaiyun.com/Two_Water/article/details/52084372

       本质是修改了Service所在进程的进程优先级。有了前台进程的优先级,在android系统清理内存的时候,他被杀死的优先级仅高于前台的activity,也就是正在和用户交互的页面,而且使用ddms杀进程他也可以自己启动起来。首先ddms杀进程和在系统设置的正在运行中杀进程本身就不具威胁,在系统设置的所有应用中选择强行停止,仍然可以强停掉,360,cm等软杀更是能轻而易举杀死他。而且他还有一个缺点,在api17以上,设置了一个前台服务,他会以一个无法消除的notification的样式出现在用户的手机状态栏里,大大降低了用户体验。可是前台服务适合做一些音乐播放器,天气类的应用!

2、在service的onStartCommand方法里返回 STATR_STICK
       主要的几个返回值:
       1. START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。 
       2. START_STICKY:系统就会重新创建这个服务并且调用onStartCommand()方法,但是它不会重新传递最后的Intent对象,这适用于不执行命令的媒体播放器(或类似的服务),它只是无限期的运行着并等待工作的到来。
       3. START_NOT_STICKY:直到接受到新的Intent对象,才会被重新创建。这是最安全的,用来避免在不需要的时候运行你的服务。
       4. START_REDELIVER_INTENT:系统就会重新创建了这个服务,并且用最后的Intent对象调。等待中的Intent对象会依次被发送。这适用于如下载文件。

       测试的service是一个最基本的service,在相应的生命周期的触发函数上做了输出。在普通的服务使用还是可以的,做常驻进程的话就不行了,force close和一些清理软件很容易就清理掉!

3、添加Manifest文件属性值为android:persistent=“true”
       app.persistent = true不仅仅标志着此apk不能轻易的被kill掉,亦或在被kill掉后能够自动restart,并且还涉及到了进程的优先级。将被设置为CORE_SERVER_ADJ,此值为-12,而核心进程init的值为-16。当前正在前台运行的进程的值为0。如果应用能设置这个属性,那就真的可以做到保活,因为他真的可以杀不死,像系统的keyguard进程,media进程,且这些进程的adj都是负数,代表了前台activity黑屏了他们也不会死。但是这个属性需要系统shareuid,然后编译不过,因为需要系统签名!
因此,要弄这个属性需获取两个关键的信息: 
       (1).在apk的AndroidManifest.xml文件中设置android:persistent=true 
       (2).此apk需要放入到system/app目录下,成为一个systemapp

       最主要的是让程序成为系统程序,这个可以做到吗?如果你技术过硬是可以尝试下的!首先弄个自动root的apk,加壳放到程序中,然后程序运行的时候,自动运行自动root的apk,获取root权限,然后在native层中,使用命令的方式把程序移到system/app目录下,成为系统程序!

4、覆写Service的onDestroy方法

      在设置里面的正在运行,注意是正在运行里面,点击关闭,会走onDestroy回调方法,你在这里可以把自己启动起来。注意是正常关闭的时候是会自己启动起来,可是使用第三方的清理软件360,root过的360,force close这些来搞,压根不会走到onDestory的方法,例子在之前service的博客中也有!可以去试试的!

5、添加广播监听android.intent.action.USER_PRESENT事件以及其他一些可以允许的事件
       android.intent.action.USER_PRESENT,这是一个android解锁的广播事件。注意,这不是SCREEN_ON\SCREEN_OFF广播,,这不是SCREEN_ON\SCREEN_OFF广播,这不是SCREEN_ON\SCREEN_OFF广播。这是一个可以静态注册的广播。所以在manifest里面注册之后不需要任何前提,理论上用户每次开屏解锁都会触发我们的onReceive事件,在这里我们可以检查进程服务是否在,不在就拉起来。
但是,这个事件只有解锁才有,如果用户的没有设置锁屏,那么这个事件就是没有的,而且我们的目标是保证进程一直存活,而不是尽可能多的活起来。所以这个当作一个补充的手段也不错,另外所有那些可以静态注册的广播都可以这样搞,前提是你不怕用户看到你申请了好多权限,当然这个USER_PRESENT事件是不需要权限的。
以下是几个常见可以静态注册的广播
android.intent.action.USER_PRESENT
android.net.conn.CONNECTIVITY_CHANGE
android.intent.action.MEDIA_MOUNTED
android.intent.action.MEDIA_UNMOUNTED
android.net.wifi.RSSI_CHANGED
android.net.wifi.STATE_CHANGE

android.net.wifi.WIFI_STATE_CHANGED

6、服务互相绑定

      这个是android里面一个特性,跨进程bind一个service之后,如果被bind的service挂掉,bind他的service会把他拉起来!可以考虑使用远程服务来实现,可是还是不能保活进程,可以被杀掉!

7、设置闹钟,定时唤醒
      一开始个人认为这个效果还是可以的,个人测试的时候,使用360清理,他是可以保活的,开机也能重启,可是有时会失灵,而且面对force close直接挂掉!具体的例子和实现也就一个监听开机的广播,和一个周期性的闹钟!
相关的知识点可以看我之前的博客:
Android_AlarmManager(全局定时器)::http://blog.youkuaiyun.com/Two_Water/article/details/52004414
Android_Service(2)前台服务(service)和远程服务(service):http://blog.youkuaiyun.com/Two_Water/article/details/52084372

Demo的下载地址:http://download.youkuaiyun.com/detail/two_water/9595724




8、账户同步,定时唤醒

      这个是找了很久才发现有这个东西的,android系统里有一个账户系统,设置一个自己的账户,android会定期唤醒账户更新服务,我们可以自己设定同步的事件间隔。且发起更新的是系统,不会受到任何限制。
可是它还是有局限性:
      1. 用户会在系统设置的账户列表里面看到一个不认识的账户;
      2. 同步的事件间隔是有限制的,最短1分钟,见源码,如果小雨60秒,置为60秒。而且各种国产机怎么改的源码我们未可知,是不是都能用仍然未可知;
      3. 很致命,某些手机比如note3需要手动设置账户,你如何骗你的用户给你手动设置账户完了之后不卸载你;
      4. 也很致命,必须联网!google提供这个组件是让你同步账户信息,不联网你同步个鬼,我们要保活,可以不联网不做事,但是不能不联网就死

9、native层保活(守护进程)

       至于native层保活,一开始是在github上找个这个开源项目的:https://github.com/Coolerfall/Android-AppDaemon
 Demo下载地址:http://download.youkuaiyun.com/detail/two_water/9595967
       可是这个只能在5.0以下的使用,更重要的一点是他没有进程守护,然后再寻找资源,找到了下面的这个大神的项目:
 https://github.com/Marswin/MarsDaemon
 Demo下载地址:http://download.youkuaiyun.com/detail/two_water/9595966
       这个项目的原理和他的想法都在他的博客有详细的介绍,我这个菜鸟就不作分析了:
       Android 进程常驻(0)----MarsDaemon使用说明:http://blog.youkuaiyun.com/marswin89/article/details/50917098
       Android 进程常驻(1)----开篇:http://blog.youkuaiyun.com/marswin89/article/details/48015453
       Android 进程常驻(2)----细数利用android系统机制的保活手段:http://blog.youkuaiyun.com/marswin89/article/details/50890708
       Android 进程常驻(3)----native保活5.0以下方案推演过程以及代码详述:http://blog.youkuaiyun.com/marswin89/article/details/50899838
       Android 进程常驻(4)----native保活5.0以上方案推演过程以及代码详述:http://blog.youkuaiyun.com/marswin89/article/details/50916631
       Android 进程常驻(5)----开机广播的简单守护以及总结:http://blog.youkuaiyun.com/marswin89/article/details/50917409
      最后感谢大神,让我学习了!不过建议大家不必要使用常驻进程的软件还是不要使用!影响用户的体验,用来研究玩玩还是可以的!

     pdf:http://download.youkuaiyun.com/detail/two_water/9596051








Android常驻进程之守护进程 System.out.println("查看服务是否为true-->"+String.format("service [%s] running status:[%s]", serviceName, isServiceRunning));//开启DaemonService服务。//停止DaemonService服务。//开启CoreService服务。//停止CoreService服务。 阅读详情

相关推荐

Android APP 提高进程服务优先级 常驻内存 服务杀不死

首先明确,国内定制的系统(小米,华为,OPPO等)都实现了 无论自启或提升进程优先级的策略都能被杀死,而对于用户量大的APP(如微信)和系统级别APP 系统有做白名单;抛开那些定制系统,还是有很多原生系统没有这些策略,或者说那些系统优化策略不彻底,因此我们提升进程优先级才变得有意义1.针对系统签名APP 进程永驻(系统级别的kill和forceStop也杀不死)添加android:persiste...

你只是看起很努力 9929

linux常驻进程与非常驻进程,Daemontools和Supervisor管理linux常驻进程

linux主要使用supervise来管理常驻进程。基于supervise的两个比较重要的工具是Daemontools和Supervisor。实际上,supervise也算Daemontools的一个工具。Daemontools是svscanboot,svscan,supervise,svc,svok,svstat等一系列工具的合集。安装执行安装后,所有的命令都放到了/command目录,并软链到...

weixin_35122994的博客 1559

Android 进程常驻(0)----MarsDaemon使用说明

Android常驻进程,进程保活,通过native实现进程守护,低耗电,在root360,rootCM,系统forceclose 下均可存活,测试系统从2.3到5.1,机型为三星、华为、小米、亲儿子。本文记录了笔者从开始调研,到一步一步的试验的基本全部思路。ps:只为服务用户,只为技术交流,流氓绕行。

猫九爷阳果果 7万+

汇总:服务器常用配置与运维命令

linux后台进程常驻

流星雨的博客 1231

Android 进程常驻(1)----开篇

Android常驻进程,进程保活,通过native实现进程守护,低耗电,在root360,rootCM,系统forceclose 下均可存活,测试系统从2.3到5.1,机型为三星、华为、小米、亲儿子。本文记录了笔者从开始调研,到一步一步的试验的基本全部思路。ps:只为服务用户,只为技术交流,流氓绕行。

猫九爷阳果果 2万+

Android 进程常驻(5)----开机广播的简单守护以及总结

Android常驻进程,进程保活,通过native实现进程守护,低耗电,在root360,rootCM,系统forceclose 下均可存活,测试系统从2.3到5.1,机型为三星、华为、小米、亲儿子。本文记录了笔者从开始调研,到一步一步的试验的基本全部思路。ps:只为服务用户,只为技术交流,流氓绕行。

猫九爷阳果果 1万+

Android实际开发问题05------杀不死的服务

最近项目中遇到一个需求:需要打开一个服务常驻于后台,接受极光推送的推送消息,

鼆蓂値籦的博客 1003

Android-app如何保证后台服务不被杀死

Android的进程保活包括两个方面:提高进程的优先级,降低进程被杀死的概率.在进程被杀死后,进行拉活.

我的app目前真正做到了杀不死了-----长生了?

刚刚推送的notification。这就说明闹钟能稳定了。看我现在把app关掉,他还会重启。

44

麒麟系统下的多媒体革命:VLC在kylinV10上的性能优化与调试技巧

本文详细介绍了在麒麟kylinV10系统上优化VLC多媒体播放性能的实战技巧,特别针对飞腾FT-2000/4硬件平台。从源码编译调优到硬件加速配置,提供全面的性能提升方案,帮助开发者在国产操作系统上构建高效媒体播放环境。

weixin_29168675的博客 457

在linux上本地大模型部署与推理

您的Python脚本(客户端)可能在您的个人电脑上,而模型服务(服务器)在远程Linux服务器上。如果您的服务器有强大的NVIDIA GPU,并且您对性能有更高的要求(例如需要高吞吐量),vLLM是更好的选择。这种方式无需向公网暴露服务器端口,而是通过加密的SSH通道将服务器的端口“映射”到您的本地电脑上。我们将启动一个API服务器,它会加载您指定的模型,并等待您的代码前来调用。如果您直接在SSH窗口运行上面的命令,一旦您关闭窗口,服务就会停止。这是根据您的原始代码修改的版本,适配本地vLLM服务。

frostmelody 全网同名,大家多多关注呀~ 持续分享优质内容! 2054

Android 通过JNI实现守护进程

开发一个需要常住后台的App其实是一件非常头疼的事情,不仅要应对国内各大厂商的ROM,还需要应对各类的安全管家... 虽然不断的研究各式各样的方法,但是效果并不好,比如任务管理器把App干掉,服务就起不来了...

吧主 645

Quartus II 13.0安装避坑指南:从下载到破解的完整流程(附常见错误解决方案)

本文提供Quartus II 13.0软件的详细安装与破解指南,涵盖从下载准备、路径设置、主程序安装到授权配置的全流程。重点解析了破解过程中生成和修改license.dat文件的核心步骤,并针对“无法找到有效的License文件”等常见错误提供了实用的解决方案,帮助用户快速构建稳定的FPGA开发环境。

weixin_29291863的博客 759

双进程守护,驻留,杀不死服务

这是一个轻量级的库,配置几行代码,就可以实现在Android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下,clean master获取root权限下都无法杀死进程 支持系统2.3到6.0 支持大部分设备,包括三星,华为,oppo,nexus,魅族等等 可以简单对开机广播进行保护 github地址: https://github.co

韩梦飞沙_韩亚飞 4409

交流电路计算方法:复阻抗和相量法

一,复阻抗 电容电路,电压与电流的大小比值是XC=1/WC,相位上电流比电压超前90度 这样描述很麻烦,在复平面里,相位超前90度,可以用什么数学表示呢? 也就是说,一个相量,乘以j之后,大小没变化,相位变得超前90度了 同样的,大小不变,相位落后90度应该除以j 原来我们说电容电路,给个电压,算电流又要算XC,又要另外说相位超前90度,现在可以简单点 在这个计算式里,1/wc还是原来的容抗大...

theory and practice的博客 3万+

慕课软件质量保证与测试(习题集)

慕课金陵科技学院.软件质量保证与测试.期末复习.习题汇总0 总目录1 绪论1.1 软件质量保证与测试的产生与发展1.2 软件缺陷,软件错误,软件故障1.3 软件质量保证与测试的意义,原则和挑战1.4 单元测试1.5 课后作业2 软件测试策略2.1 软件测试的模型,过程和生命周期2.2 软件测试的方法和技术2.3 单元测试2.4 课后作业3 黑盒测试3.1 黑盒测试概述3.2 等价类划分测试3.3 边界值测试3.4 错误推测法3.5 判定表驱动法3.6 因果图法3.7 场景法3.8 正交实验法3.9 单元测试

weixin_42473228的博客 5万+

Android 进程常驻(2)----细数利用android系统机制的保活手段

Android常驻进程,进程保活,通过native实现进程守护,低耗电,在root360,rootCM,系统forceclose 下均可存活,测试系统从2.3到5.1,机型为三星、华为、小米、亲儿子。本文记录了我从开始调研,到一步一步的试验的基本全部思路。ps:只为服务用户,只为技术交流,流氓绕行。

猫九爷阳果果 3万+

自适应控制 (Adaptive Control) 算法详解及案例分析

自适应控制是一种能够在线调整控制器参数以适应系统动态变化的控制方法。其核心思想是通过实时估计系统参数或调整控制器参数,使系统在不确定性或动态变化的环境中仍能保持稳定性和性能。

闲人编程的博客 4084

如何让进程杀不死(2)

根据上一篇文章,我们知道了:是因为当系统资源吃紧或者说用户手动调用某些清理应用时,就会杀掉相应的进程。如果我们进程的Importance等级底与adj值高的话,我们的进程会优先被清理掉

ksws0320403的博客 870

基于MATLAB的脑功能网络工具箱:BCT与FCLab

脑功能网络分析是神经科学领域的一个重要研究方向,它通过分析大脑中神经元之间的连接模式和信息传递方式,揭示脑网络的结构和功能。在这个领域,MATLAB是一个广泛使用的工具,提供了丰富的函数和工具箱来进行脑功能网络的分析和可视化。这些工具箱提供了丰富的函数和工具,使得脑功能网络的计算和分析变得更加简单和高效。在上述示例代码中,我们首先导入BCT工具箱,并构建一个邻接矩阵来表示脑网络的连接关系。在上述示例代码中,我们首先导入FCLab工具箱,并导入脑功能数据。函数对数据进行预处理,如去除噪声、降采样等操作。

web_bug407的博客 2611

YOLOv8自定义训练:车牌识别全流程(从标注到推理,附可视化代码)

车牌检测全流程实践指南 摘要:本文详细介绍了基于YOLOv8的车牌检测完整实现方案。针对车牌检测中的三大难点(小目标、多角度、光照变化),提供了从数据准备到模型部署的全流程解决方案。重点包括:1)数据采集与标注规范;2)针对小目标的YOLOv8模型优化配置;3)K-means锚框聚类方法;4)训练参数调优策略。通过实际验证,该方法可获得95%以上的检测准确率,并附有完整的代码实现和可视化工具,便于开发者快速复现应用。 (字数:149字)

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 850

android后台进程常驻,android 后台常驻,不会被kill

第一步:import android.app.Notification;import android.app.PendingIntent;import android.app.Service;import android.content.Context;import android.content.Intent;import android.media.MediaPlayer;import and...

weixin_35752122的博客 1698

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: Android_Service(2)前台服务(service)和远程服务(service)
下一篇: Wiki_Android_获取ImageView的最大最小宽度和高度
Two_Water
博客等级 码龄12年 573粉丝 134原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值