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

  • 1.针对系统签名APP 进程永驻(系统级别的kill和forceStop也杀不死)

添加android:persistent="true"到AndroidManifest.xml中(只针对系统签名应用),添加方式如下:

<applicationandroid:name="com.ansen.CodeApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:persistent="true"android:supportsRtl="true"android:theme="@style/AppTheme">

即便是调用ActivityManager的killBackgroundProcesses或forceStopPackage方法也不会被杀掉,系统调用过程中对设置persistent的系统应用添加了过滤,ActivityManagerService源码(Android6.0)如下(we don't kill persistent processes):

private final boolean killPackageProcessesLocked(String packageName, int appId,int userId, int minOomAdj, boolean callerWillRestart, boolean allowRestart,boolean doit, boolean evenPersistent, String reason) {ArrayList<ProcessRecord> procs = new ArrayList<>();// Remove all processes this package may have touched: all with the// same UID (except for the system or root user), and all whose name// matches the package name.final int NP = mProcessNames.getMap().size();for (int ip=0; ip<NP; ip++) {SparseArray<ProcessRecord> apps = mProcessNames.getMap().valueAt(ip);final int NA = apps.size();for (int ia=0; ia<NA; ia++) {ProcessRecord app = apps.valueAt(ia);if (app.persistent && !evenPersistent) {// we don't kill persistent processescontinue;}if (app.removed) {if (doit) {procs.add(app);}continue;}// Skip process if it doesn't meet our oom adj requirement.if (app.setAdj < minOomAdj) {continue;}... ...}}... ...return N > 0;}
  • 2.给服务添加一个process,让服务在新的一个进程中运行
<serviceandroid:name=".socket.TCPServer"android:process=":TCPServer"></service>

这种方式针对AM的killBackgroundProcesses是杀不掉,该方法只能杀掉主进程

一般音乐播放器播放逻辑都是在一个新的进程中播放,如上方式添加,因此像360、安全管家等清理程序进行进程清理后,播放器任在播放,但是再次进入APP需要重新进入,因为只清理了主进程;最近发现这些清理软件会引导用户打开无障碍模式,然后模拟点击事件进入应用信息页面强制停止应用,播放器才停止播放,而设置源码中强制停止调用的是forceStopPackage方法(hide API,系统应用才能调用)

  • 3.重写服务的onStartCommand()方法,填写以下返回值
有以下四种返回值:
START_STICKY:kill后会被重启
START_STICKY_COMPATIBILITY:START_STICKY的兼容版targetSdkVersion 小于 2.0版本,就会返回该值,否则返回START_STICKY
START_NOT_STICKY:kill之后不会被重启
START_REDELIVER_INTENT:kill后会被重启

这种方式适用于360、安全管家等清理进程的软件调用AM的killBackgroundProcesses方法,但是对于forceStopPackage(hide API,系统应用才能调用)是不生效的

  • 4.监听系统一些事件启动服务

Android系统提供一系列监听,开发者可以监听这些事件来触发一些操作(开机广播,充电广播,网络广播,安装卸载广播,锁屏解锁广播等)

使用静态注册的广播接收器监听一些系统广播或其他应用发出的广播,在onReceive中重启进程

流氓策略:在监听锁屏广播,锁屏时打开一个透明的activity,这是,这个APP优先级为前台进程,优先级特别高,保证锁屏待机过程中很难杀死

还一种情况是,在onDestroy中重启service??然而service被kill的时候都没机会去调用onDestroy方法

  • 5.接入第三方推送SDK(如:个推,小米推送等),杀死APP也能收到推送

这个推送除了推送消息,还能带动其他应用的启动(上述定制系统均已实现禁止各种场景互相拉动).

最近发现一个还不错的推送SDK: https://github.com/joyrun/MixPush

  • 6.忽略电池优化功能(Android6.0推出的)

android6.0增加了Doze和AppStandby来提高电池续航.Doze是指设备长时间不用时,延迟后台CPU和网络的活动来减少电池消耗;App Standby则是延迟没有交互的app网络活动.同时,系统提供一个可配置的白名单来让某些app免除Doze和App Standby的优化.

忽略电池优化会带来更多的电池消耗同时需要用户同意方可加入,调用代码如下:


public void ignoreBatteryOptimization(Activity activity) {PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);boolean hasIgnored = powerManager.isIgnoringBatteryOptimizations(activity.getPackageName());// 判断如果没有加入电池优化的白名单,则弹出加入电池优化的白名单的设置对话框if(!hasIgnored) {Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);intent.setData(Uri.parse("package:"+activity.getPackageName()));startActivity(intent);}
}

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

  1. Shell脚本和Python查看Nginx并发连接数、进程数和常驻内存占用情况

    Shell脚本查看Nginx并发连接数.进程数和常驻内存占用情况 http://xiaoyongxing1.blog.163.com/blog/static/642807522015144302240 ...

  2. Android MarsDaemon实现进程及Service常驻

    前段时间.就讨论过关于怎样让Service常驻于内存而不被杀死,最后的结论就是使用JNI实现守护进程,可是不得不说的是,在没有改动系统源代码的情况下,想真正实现杀不死服务,是一件非常难的事情.眼下除了 ...

  3. android app性能优化大汇总(内存性能优化)

    内存简介: RAM(random access memory)随机存取存储器.说白了就是内存. 一般Java在内存分配时会涉及到以下区域: 寄存器(Registers):速度最快的存储场所,因为寄存器 ...

  4. Android App解决卡顿慢之内存抖动及内存泄漏(发现和定位)

    内存抖动是指在短时间内有大量的对象被创建或者被回收的现象,内存抖动出现原因主要是频繁(很重要)在循环里创建对象(导致大量对象在短时间内被创建,由于新对象是要占用内存空间的而且是频繁,如果一次或者两次在 ...

  5. android app 提高级别,android 关于提高第三方app的service优先级

    本博客仅仅要没有注明"转".那么均为原创,转贴请注明本博客链接链接 基本上大家都知道提高service优先级能够在非常大程度上让你的service免于由于内存不足而被kill,当然 ...

  6. Android进程保活(常驻内存)

    Android将进程分为6个等级,它们按优先级顺序由高到低依次是:  1.前台进程( FOREGROUND_APP):  2.可视进程(VISIBLE_APP ):  3. 次要服务进程(SECOND ...

  7. 耗电优化(上):Android App 耗电分析

    这里写目录标题 1. 电量和硬件 1.1 App 通过使用硬件模块消耗相应的电能 1.2 资源调度机制是厂商功耗优化最重要的手段 2. 电量和应用程序 2.1 评估不同应用程序的耗电情况 结论:把电量 ...

  8. Android app应用开发高级进阶系列专栏解读

    1.前言 在从事android app开发的几年里,最开始接触做android 都是从app开发开始做的,在做app的这几年中把积累下来的做的一些功能,都整理出来了作为自己的技术资料,在以后开发类似的 ...

  9. 一次杀不死的进程记录

    1. 发现问题: 服务器今天发现遭受木马攻击,疑似挖矿程序植入,cpu一路飙升至99%,导致其他程序异常卡顿. 机智的我上来一个top命令让程序现出原形,结果发现一个dvjj的进程耗尽了资源. 2. ...

最新文章

  1. 性能提升19倍,DGL重大更新支持亿级规模图神经网络训练
  2. “厌氧动物”出现,科学家不清楚代谢方式,或颠覆对生命的认知
  3. torch 列最大值
  4. jenkins内存溢出的一些解决过程
  5. 13.6 Thread类自定义线程类
  6. 1.3.1 操作系统的运行机制和体系结构(大内核、小内核)
  7. #linux进阶#wget
  8. 永久开启完整版Google Play
  9. python 经典排序算法
  10. excel帮助文档_可以惊艳到你的6个excel基础技巧
  11. 发布到服务器接口404_新版本永雾林渊周五来袭,404战队真的404了
  12. 正在爆发的互联网革命
  13. Depix从像素化屏幕快照中恢复密码
  14. linux的shell版url爬虫
  15. 世界著名反垃圾邮件组织的介绍
  16. No.8 Sequence Median
  17. 微软常用运行库合集(32+64位)
  18. make: *** [ext/fileinfo/libmagic/apprentice.lo] Error 1
  19. 漏洞与木马:如何保护您的网络安全
  20. 网站权重8 的网站优化方案

热门文章

  1. C#设计模式(4)——抽象工厂模式
  2. 中国支持区块链发展实际上是一套“组合拳”
  3. notebook_sql
  4. php表格列表美化,【PHPWord】创建带样式表格的Word文档
  5. 小米Redmi G游戏本怎么样
  6. 冉有-支付宝钱包的研发挑战和最佳实践
  7. 好看的美剧《生活大爆炸》
  8. Django笔记十二之defer和only
  9. 给长方体六个面贴图方法
  10. pycharm 汉化补丁