android 进程 keep live 探索

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

被杀原因总结

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

    336 引用 • 324 回帖 • 1 关注
  • 进程
    15 引用 • 4 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    10 引用 • 15 回帖
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 54 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    188 引用 • 1057 回帖
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖 • 1 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 119 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 118 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 36 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 37 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 234 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    134 引用 • 1127 回帖 • 108 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    93 引用 • 122 回帖 • 616 关注
  • FreeMarker

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

    23 引用 • 20 回帖 • 469 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    346 引用 • 760 回帖
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 496 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    61 引用 • 29 回帖 • 9 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    204 引用 • 1477 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    35 引用 • 468 回帖 • 762 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    948 引用 • 1460 回帖
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖 • 1 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    86 引用 • 165 回帖
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • 反馈

    Communication channel for makers and users.

    120 引用 • 906 回帖 • 280 关注
  • Thymeleaf

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

    11 引用 • 19 回帖 • 395 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 267 关注
  • FFmpeg

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

    23 引用 • 32 回帖 • 8 关注