android 进程 keep live 探索

本贴最后更新于 2896 天前,其中的信息可能已经事过境迁

被杀原因总结

  • LowMemoryKiller:这种情况是触发了系统进程管理机制,通过系统会参照当前系统资源情况和 oom_adj 值来回收进程,oom_adj 越大,越容易被杀死
  • 第三方清理软件:杀死 oom_adj 值大于 4 的进程,如果拥有 root 权限,理论可杀死所有进程
  • 厂商杀进程:可杀所有进程 如厂商的自带的系统管家,对使用者来说功能强大,但对开发者来说很头疼的
  • Force-stop:可杀所有非系统进程

keep live 常见方法

  • 厂商应用白名单或者系统 app
    富人玩的,这个不属于技术范畴(qq,微信)

  • 链式启动
    百度,阿里,腾讯的全家桶应用的就是这个

  • 监听广播方式 (AlarmManager 唤醒、native 进程拉起等方式已经失效)
    通过监听一些全局的静态广播,比如开机广播、解锁屏广播、网络状态广播等,来启动应用的后台服务。目前,在高版本的 Android 系统中已经失效,因为高版本的 Android 系统规定应用必须在系统开机后运行一次才能监听这些系统广播,一般而言,应用被系统杀死后,基本无法接收系统广播。

  • 提高 Service 的优先级
    以前提高 Service 优先级方法很多,比如 onStartCommand 返回 START_STICKY 使系统内存足够的时候 Service 能够自动启动、弹出通知、配置 service 的优先级等,这些方式只能在一定程度上缓解 service 被立马回收,但只要用户一键清理或者系统回收照样无效。

  • 全局定时器
    还有一种方法就是在设置一种全局定时器,定时检测启动后台服务,但这种方法目前也已经无效,因为应用只要被系统杀死,全局定时器最后也只成了摆设。

  • 应用中的双 service 拉起
    经过测试,只要当前应用被杀,任何后台 service 都无法运行,也无法自行启动。

  • 应用中的双进程拉起
    这种方式就是传说中的使用 NDK 在底层 fork 出一个子进程,来实现与父进程之间的互拉。在 Android4.x 还是非常有效的,但是高版本的 Android 系统的系统回收策略已经改成进程组的形式了,如果系统要回收一个应用,必然会杀死同属于一个进程组的所有进程,因此最后导致双进程无法拉起。

  • JopService
    对于 Android 5.0,JobSheduler 的唤醒是非常有效的;对于 Android 6.0,虽然谷歌引入了 Doze 模式,但通常很难真正进入 Doze 模式,所以 JobSheduler 的唤醒依然有效;对于 Android 7.0,JobSheduler 的唤醒会有一定的影响,我们可以在电池管理中给 APP 开绿色通道,防止手机 Doze 模式后阻止 APP 使用 JobSheduler 功能。注:如果遇到深度定制机型,这就要看运气了...

  • 一像素 Activity
    当锁屏时候启动一个一像素界面,使应用置于前台,避免被杀,试过可行,但行为有些流氓,像一些锁屏点亮广告的原理就是基逾此的。如果开发者都这样,效果就要打折扣了。

参考实例 http://blog.csdn.net/andrexpert/article/details/53485360 vivox9 7.0 失效 魅族 mx3 5.0 可以用

参考实例 http://blog.csdn.net/AndrExpert/article/details/75174586 vivox9 7.0 失效 魅族 mx3 5.0 可以用
参考实例 http://blog.csdn.net/andrexpert/article/details/75045678 7.0 一像素 还是可行的
结论 :一些传统的进程保活,如 双进程,jobservice 对于 7.0 系统来说很难过了,据说 8.0 更是困难(目前还没有测试 8.0 手机)

另一种思路 : 走系统通道

  • 引导用户将应用添加到白名单(辅助功能)
  • 走系统通道,如小米推送,华为推送的后台保活走的都是系统通道,小米,华为的出货量还是比较客观的。这样要求 app 集成多个推送服务,很是麻烦。
  • 综合前面用到的几种灰色保活手段,存活率提高了不少,但也总是有极个别的不行,但这也至少满足了 9 成的需求(android7.0 之下,8.0 基本上不可能,也许有些未公开的灰色手段)

总结:鉴于 android 的开源性,总有一些保活的黑科技在不断的挖掘出来,但同样由于此原因,也总有一些深度定制的手机无法应用此黑科技。但是满足多数需求还是没问题的!

参考 ## 揭秘 360 手机助手未经用户同意,自动开启辅助功能的“黑科技”
参考 Android 6.0 以上系统 APP 保活方法归纳

  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    337 引用 • 324 回帖
  • 进程
    15 引用 • 4 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 513 关注
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 77 回帖
  • Outlook
    1 引用 • 5 回帖
  • 工具

    子曰:“工欲善其事,必先利其器。”

    302 引用 • 772 回帖
  • Follow
    4 引用 • 12 回帖 • 13 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    379 引用 • 1868 回帖 • 2 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    43 引用 • 44 回帖
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 2 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    63 引用 • 289 回帖
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 838 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    292 引用 • 4495 回帖 • 663 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 639 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 562 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 560 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 6 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 2 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 636 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    32 引用 • 108 回帖
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖 • 1 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    29 引用 • 230 回帖 • 123 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 475 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 566 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 742 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    27 引用 • 292 回帖