android 进程 keep live 探索

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

被杀原因总结

  • 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 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    333 引用 • 323 回帖 • 67 关注
  • 进程
    15 引用 • 4 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 429 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 2 关注
  • CAP

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

    11 引用 • 5 回帖 • 565 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 1 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 7 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    27 引用 • 66 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖 • 32 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 181 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    4 引用 • 55 回帖 • 9 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖 • 2 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 635 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    710 引用 • 1173 回帖 • 171 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 5 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    89 引用 • 345 回帖
  • 博客

    记录并分享人生的经历。

    270 引用 • 2386 回帖
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    16 引用 • 53 回帖 • 123 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 398 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 42 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    22 引用 • 31 回帖 • 3 关注
  • SOHO

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

    7 引用 • 55 回帖 • 92 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 7 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 111 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    21 引用 • 58 回帖
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 5 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 559 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 319 关注