-
2016-10-25 16:37:56
从技术角度概括一下现在普遍的防杀方法
- Service设置成START_STICKY,kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样
- 通过 startForeground将进程设置为前台进程,做前台服务,优先级和前台应用一个级别,除非在系统内存非常缺,否则此进程不会被 kill
- 双进程Service:让2个进程互相保护,其中一个Service被清理后,另外没被清理的进程可以立即重启进程
- QQ黑科技:在应用退到后台后,另起一个只有 1 像素的页面停留在桌面上,让自己保持前台状态,保护自己不被后台清理工具杀死
- 在已经root的设备下,修改相应的权限文件,将App伪装成系统级的应用(Android4.0系列的一个漏洞,已经确认可行)
- Android系统中当前进程(Process)fork出来的子进程,被系统认为是两个不同的进程。当父进程被杀死的时候,子进程仍然可以存活,并不受影响。鉴于目前提到的在Android-Service层做双守护都会失败,我们可以fork出c进程,多进程守护。死循环在那检查是否还存在,具体的思路如下(Android5.0以下可行)
- 用C编写守护进程(即子进程),守护进程做的事情就是循环检查目标进程是否存在,不存在则启动它。
- 在NDK环境中将1中编写的C代码编译打包成可执行文件(BUILD_EXECUTABLE)。
- 主进程启动时将守护进程放入私有目录下,赋予可执行权限,启动它即可。
- 联系厂商,加入白名单
更多相关内容 -
android 实现让程序一直处于前台
2018-12-14 18:10:02实现让自己的程序APP一直处于前台,当APP不在前台自动回到前台显示 -
android怎么做到让程序一直后台运行?
2017-07-20 09:22:08我得程序登录成功后,后台运行,过一段时间后,就会被后台干掉,点击时会退到登录页面重新登录,怎么才能让它像扣扣微信一样一直保持后台运行,或者后台运行时间长一点,我已经加service了,还是不行,是我的服务有... -
如何让安卓APP一直在后台运行?
2016-04-23 10:30:23就是调用系统的API启动一个前台Service进程,这样会在通知栏生成一个Notification,用户知道哪些进程正在运行 4 灰色保活 1 保活领域应用最为广泛,利用系统的漏洞来启动一个前台的Service...本文摘自微信公众号“android高心星的私塾”
一 声明
1 网上很多的保活手段,但是不靠谱的居多
2 本文只是进行保活知识的推广,不是在教你做永生不死的进程
二 保活手段
1 业界保活手段:黑色保活,灰色保活,白色保活
2 黑色保活:
1 不同的APP进程,用广播相互唤醒,包括利用系统广播进行唤醒
2 常见手段:
1 开机,网络切换,拍照,拍视频等利用系统广播唤醒APP
此场景Google已经意识到,在Android N 取消了 拍照,视频,网络切换的广播
2 接入第三方的SDK也会唤醒相应的APP进程
3 假如你手机里装了支付宝,淘宝,UC等阿里系的APP,那么你打开任何一个,都有可能唤醒其他的阿里系的APP
3 白色保活:
就是调用系统的API启动一个前台Service进程,这样会在通知栏生成一个Notification,用户知道哪些进程正在运行
4 灰色保活
1 保活领域应用最为广泛,利用系统的漏洞来启动一个前台的Service进程,与“白色保活”不同的是,它不会在通知栏生成一个Notification,用户无法察觉,但是优先级要高于普通的后台进程。
2 实现思路
思路一:当API<18,启动前台的Service直接传入new Notification();
思路二:当API >= 18,同时启动两个id相同的前台Service,然后再将后启动的Service做stop处理
代码这样写:
import android.app.Notification; import android.app.Service; import android.content.Intent; import android.os.Build; import android.os.IBinder; /** * APP灰色保活 * Created by fflin on 2016/4/23. */ public class GrayService extends Service { private final static int GRAY_SERVICE_ID = 1001; @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { //API < 18,此方法能有效地隐藏notification的图标 if (Build.VERSION.SDK_INT < 18) { startForeground(GRAY_SERVICE_ID, new Notification()); } else { Intent intent1 = new Intent(this, GrayInnerService.class); startService(intent1); startForeground(GRAY_SERVICE_ID, new Notification()); } return super.onStartCommand(intent, flags, startId); } //给API >= 18 的平台上做灰色保护手段 public class GrayInnerService extends Service { @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { startForeground(GRAY_SERVICE_ID, new Notification()); stopForeground(true); stopSelf(); return super.onStartCommand(intent, flags, startId); } } }
3 检验方法:
首先看系统通知栏有没有Notification,如果没有,就进入手机adb shell模式,输入命令dumpsys activity services PackageName
打印出指定包名的所有进程中的service信息,看下有没有isForground=true的信息,如果有,就说明了该APP使用了灰色保活
4 使用灰色保活手段并不意味着你的应用就能永生不死,只能说提高了进程的优先级,如果应用占用了很大的内存,还是会被回收的
三 进一步理解保活
1 进程回收机制系统出于体验和性能上的考虑,APP在退出后台时系统并不会真正的kill掉这个进程,而是将其缓存起来,打开的应用越多,后台缓存的进程也就越多。在系统内存不足的情况下,系统开始根据自身的一套进程回收机制来判断要回收掉哪些进程,这套杀死进程回收内存的机制叫 Low Memory Killer,它是基于Linux内核的OOM killer机制诞生的,该机制为每个系统分配了一个值,叫做oom_adj,代表了进程的优先级,oom_adj越大,代表优先级越低,越容易被回收,普通APP进程的oom_adj >=0,系统的可能会小于0.2 查看oom_adj的值,需要用到两个shell命令ps | grep 包名$cat /proc/进程id/oom_adj3 结果发现,APP推到后台,UI进程的值降低最为明显,因为它占用的内存资源最多,因此,为了避免后台UI进程被杀,需要尽可能的释放一些不用的图片,音频资源
-
如何让程序在锁屏后还一直运行
2017-08-15 11:25:18但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,android系统中CPU会保持在一个相对较低的功耗状态,但是上传位置信息需要网络请求来消耗CUP的。...最近在开发一款定位APP,需求是在时刻进行定位,及时锁屏后也需要保持定时上传位置信息。但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,android系统中CPU会保持在一个相对较低的功耗状态,但是上传位置信息需要网络请求来消耗CUP的。此前我试了各种方法,websocket、轮询、前台Service效果都不理想,自从使用了Android中的WakeLock机制,我腰不酸了,腿不疼了,上传数据都有劲了!话不多说,来一起看看如果实现WakeLock机制。
//获取电源锁,保持该服务在屏幕熄灭时仍然获取CPU时,保持运行 private void acquireWakeLock() { if (null == wakeLock) { PowerManager pm = (PowerManager)this.getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, "PostLocationService"); if (null != wakeLock) { wakeLock.acquire(); } } } //释放设备电源锁 private void releaseWakeLock() { if (null != wakeLock) { wakeLock.release(); wakeLock = null; } }
在程序第一次创建的时候调用acquireWakeLock方法,销毁的时候调用releaseWakeLock方法
**各种锁的类型对CPU 、屏幕、键盘的影响:
PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。
SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯
SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯
FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度
ACQUIRE_CAUSES_WAKEUP:强制使屏幕亮起,这种锁主要针对一些必须通知用户的操作.
ON_AFTER_RELEASE:当锁被释放时,保持屏幕亮起一段时间**还要在AndroidManifest中添加权限
<uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.DEVICE_POWER"/>
如果大家有更好的方法,欢迎留言交流~
-
android 如何让自己的App一直运行
2018-08-15 15:25:54主要看第二个方法:(A,Bservice在两个进程中,所以要用到AIDL来跨进程) 在原本只有一个serviceA的情况下再声明一个serviceB,并为之新开启一个进程; serviceA被杀死的时候,serviceB立刻重启serviceA;...主要看第二个方法:(A,Bservice在两个进程中,所以要用到AIDL来跨进程)
在原本只有一个serviceA的情况下再声明一个serviceB,并为之新开启一个进程;
serviceA被杀死的时候,serviceB立刻重启serviceA;(在serviceB中重写ServiceConnection中的Connect和Disconnect方法,在disconnect中start和bindserviceA);
如下:在主服务StepService中的Disconnect方法中start和bindservice GuardService;
serviceB被杀死的时候,serviceA立刻重启serviceB;(在serviceA中重写ServiceConnection中的Connect和Disconnect方法,在disconnect中start和bindserviceB)
两个进程互相守护
-
qt for android程序保活 程序后台一直运行不被清理掉(未完)
2019-05-13 17:04:03本博主要就是分享如何让qt开发的android程序在手机上运行,切换到后台的时候,程序仍然在一直运行,为什么这么做呢,因为我有需求是app连接蓝牙后,程序切换到后台,仍然能接受到蓝牙发送的数据并保存时间等信息,... -
怎么让 Android 程序一直后台运行,像 QQ 一样不被杀死?
2017-08-21 20:31:37QQ黑科技:在应用退到后台后,另起一个只有 1 像素的页面停留在桌面上,让自己保持前台状态,保护自己不被后台清理工具杀死 在已经root的设备下,修改相应的权限文件,将App伪装成系统级的应用(Android4.0系列的一个... -
安卓手机锁屏后程序自动关闭,怎么设置手机app允许锁屏后台运行
2021-06-05 17:16:06原标题:安卓手机锁屏后程序自动关闭,怎么设置手机...但很多人需要让手机上某些app不间断的程序运行,如我们的IP这类的软件,我们需要一直运行,才能起到作用,但是每次手机一锁屏,app就自动退出了,所以很麻烦 ,... -
Android studio在手机上运行的程序全部闪退该怎么办(无bug)
2020-03-17 17:17:16打开 File——>Settings 在搜索里输入 Instant Run 将里面的Enable Instant Run…这句话的勾去了,手机上在做一下内存清理,就可以在手机上运行了。 博主这样做在手机上就可以继续运行,希望也能帮助到你。 ... -
微信小程序运行流程
2019-04-23 10:10:42一.微信小程序是啥 本质其实就是(混合)的app 介于web app与native 原生app之间,具备丰富的调用手机各种功能的接口,同时又具备灵活性,跨平台 ...在 iOS 上,小程序的 javascript 代码是运行在 JavaScriptCo... -
关于uniapp运行到小程序一直卡在“正在初始化通信中”的问题
2020-04-14 09:44:52在使用uniapp运行到微信开发者工具的时候,微信开发者工具一直卡在“正在初始化通信中”这一步,然后查了查是因为hbuilderx的版本问题,升级最新版就好了,大家遇到可以试试 ... -
简单优雅的让你的app一直运行在后台
2017-04-01 14:34:34其实“一直”这个词并不妥当,没有哪个用户会希望某个程序一直存在在任务栏,万一手机出现卡顿的问题那么他很可能会把锅直接甩给你,这就尴尬了。所以我们要的就是,不让用户点“返回”键直接退掉应用即可,当用户在... -
如何在Android系统锁屏后使程序继续运行?
2020-12-23 18:06:11话不多说,先上代码:首先在AndroidManifest.xml中申请WakeLock权限XHTML1然后在你需要保持系统一直运行的地方写下面的代码:JavaPowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);... -
uni-app - 自定义安卓模拟器配置到MUMU模拟器运行程序(电脑手机模拟器运行)
2020-12-31 15:42:13有时候,可能需要将 uni-app 项目运行到电脑的手机模拟器,比如 MUMU 模拟器,如下图所示: 第一步 下载传送门:http://mumu.163.com/ 下载 MUMU 模拟器,很简单。 第二步 接下来,配置模拟器端口以及 adb 路径,... -
4g运行内存(手机4g与6g运存的利弊)
2021-01-26 12:12:22够用了,目前主流手机基本上都是4G运行内存的,只要不在手机上安装使用大的软件,比如某些游戏等,一般正常软件大都几十M,所以,4G完全够用了。手机运行内存4g和6g的区别:内存就是运算芯片运算处理时(运算开启的... -
程序在计算机中是怎样运行的
2020-02-23 18:57:05程序在计算机中是怎样运行的 大学,学了四年计算机. 但对于这个问题一直没有深入的了解; 只是大概知道程序需要编译成二进制的可执行文件计算机才可以执行; 最近,突然特别想知道具体是怎么样的? 所以,想着写篇文章记录... -
Android 程序后台运行和锁屏运行
2019-09-02 17:58:001.在华为手机中应用切换到后台后,打开其他app。需要我的应用后台仍然能够访问http,传输数据。 2.息屏后服务没有退出的话,需要继续后台运行,并进行网络数据的传输和请求 方案 1.添加应用到白名单中。代码如下: ... -
如何在Android设备上关闭/停止正在运行的应用程序
2020-09-27 17:33:29除非应用程序运行异常或您要卸载它,否则实际上没有必要退出该应用程序。 然后,您可以“强制停止”应用程序。 Forcing an app to stop is easy using the Settings in the Android system. We will show you how ... -
微信小程序运行流程看这篇就够了
2018-05-18 11:27:05微信小程序是啥本质其实就是(混合)的app 介于web app与native 原生app之间,具备丰富的调用手机各种功能的接口,同时又具备灵活性,跨平台1. 运行环境差异微信小程序运行在三端:iOS、Android 和 用于调试的开发者... -
嵌入式应用程序下载到ARM开发板后如何运行程序?
2019-03-19 21:52:01这个问题对于了解开发流程的人来说,就太幼稚了,但是对于第一次编写应用程序,并且想要在开发板上运行的人来讲,可能就有点小懵逼了。 当应用程序编好以后,首先需要想办法把应用程序搬迁到开发板上,目前比较... -
Android studio 运行项目出现 应用程序安装异常(-15)
2022-01-06 11:23:36报错在手机上面显示为 应用程序安装异常(-15) 主要是出现在vivo手机上 解决方法 打开项目的 gradle.properties 文件,在里面加入 android.injected.testOnly=false 即可正常运行项目 仅作记录,如有帮助,点个赞啊 ..... -
unity生成的apk在手机上运行时屏幕一直在闪烁怎么处理?
2017-10-17 13:33:43 -
Qpython 手机上运行kivy程序报错
2018-05-04 22:36:21昨天下载了Qpython,感觉发现了新大陆,但是运行任何程序都报错,无奈,把电脑kivy安装包里的实例都上传到手机上试一下,发现都报错,报错信息都是systemError:null result without error,还以为是手机的问题。... -
安卓APP锁定后台运行的方法
2021-05-26 10:36:00因为安卓系统后台程序限制,软件在长时间挂后台运行时会被系统杀掉,可以将程序加入清理白名单中,并在手机系统设置中的“电池->后台高耗电中允许软件后台高耗电”具体方法如下:1.将应用加入到清理白名单中方法... -
如何让android的service一直在后台运行
2016-03-30 19:09:521. 把service和activity分开,让service开机启动。设置一个broadcast receiver接受开机信号, 使用RECEIVE_BOOT_COMPLETED的permission, 然后启动service。activity启动后绑定到service上, 通过ipc机制通信,... -
Autojs教程--3.如何手机后台运行脚本(七猫小说举例) (上)
2020-03-13 12:35:25安装VMOS在后台运行的方法,是让脚本运行在手机上虚拟出来的一个环境,这里我们用VMOS。在度娘搜索VMOS虚拟大师。 下载一个,app比较大,建议手机腾出多点空间。 下载好之后,进行安装,安装后,会要求权限申请,点... -
HBuilder/HBuilderX真机运行、手机运行、真机联调常见问题
2021-05-06 20:50:28Android11系统真机运行,暂不支持Android Studio自带的Android11模拟器,请使用真实手机,如果碰到Android11手机无法真机运行,请单独发帖,并提供详细设备信息。 出现问题手机分析清楚问题在哪个环节。 从在... -
开发手札:unity手机端webgl运行
2020-08-13 22:52:42最近学车一个月了,每周... 其实unity的webgl很早就支持手机端运行了,只是unity官方觉得webgl版本在性能和易用性上并不完善,所以一直屏蔽webgl在手机端运行而已,对于这种屏蔽我们随意修改一个函数即可。 我们现... -
三星手机总是报XXX已停止运行,或XXX屡次停止运行
2018-03-07 16:57:08三星手机总是报XXX已停止运行,或XXX屡次停止运行,如图:打印日志如下:03-07 16:05:16.257 32489-32489/com.yoto.ubox:ipc E/Zygote: v2 03-07 16:05:16.258 32489-32489/...