Android5.0以上app进程保活的正确姿势

我的原文: http://blog.csdn.net/brycegao321/article/details/52312030

有图有真相,  亲测锤子T2、华为Mate8手机杀掉进程后能自启, 我设置的自启时间间隔为500ms(仅仅是为了测试)。

   

首先要明确保活的概念:

1、非android核心进程(例如com.android.phone)都可以被干掉;

2、保活并不能真正的保证app进程不死,  而是能在被干掉后马上启动;

Android系统按照进程的优先级分为:

1. 前台进程(Forgroud process):  
顶层activity(已执行onResume);
有个Service,并绑定到跟用户正在交互的activity;在Service里调用了startForground函数;正在执行
onReceive函数的BroadCastReceiver。

2. 可见进程(Visible process):   被对话框遮挡的activity, 执行了onPause;    拥有绑定到Activity的Service, 但该Activity被遮挡了,  例如按Home键,并执行了onStop。
3. 服务进程(Service process): 有正在运行的Service, 但是没有1/2的特性。

4. 后台进程(Background process)没有正在运行的Service, 只有不可见的Activity,  即Activity执行了onStop函数。

5. 空进程(Empty Process), 不含Android 4大组件的进程。

按照Android的设计,  app只能提高自己的进程优先级,  降低被杀掉的概率。

我们更关心的是进程被干掉后怎么拉起来,  有如下几个方法:

1、 注册静态BroadcastReceiver,  监听系统广播;

2、 启动一个服务, 并覆盖Service的onStartCommand函数, 返回Service.START_STICKY。    用处是被gc回收后在以后某个时间被系统拉起来, 然并卵,    并不是我们想要的。

3.   使用Native进程保活,  Android5.0以下好用, 在Android5.0以上就废了, 所以不细说了。

4.  使用JobSheduler机制保活,   上帝在关闭一扇门的时候(native进程保活废弃了),打开了一扇窗(JobSheduler替代了native进程方式)。

5.   家族系app互拉, 例如百度旗下所有app, 启动其中一个app时, 它会拉起百度旗下其他app进程。作法很流氓,  也是厂商和用户深恶痛绝的。

以下是参考代码, 只是为验证进程能自启, 所以写的很简单

public class MyJobService extends JobService {    @Override    public void onCreate() {        super.onCreate();        startJobSheduler();    }    public void startJobSheduler() {        try {            int id = 1;            JobInfo.Builder builder = new JobInfo.Builder(id,                    new ComponentName(getPackageName(), MyJobService.class.getName() ));            builder.setPeriodic(500);  //间隔500毫秒调用onStartJob函数, 500只是为了验证            JobScheduler jobScheduler = (JobScheduler)this.getSystemService(Context.JOB_SCHEDULER_SERVICE);            int ret = jobScheduler.schedule(builder.build());        } catch (Exception ex) {
            ex.printStackTrace();        }
    }    @Override    public boolean onStartJob(JobParameters jobParameters) {
        Log.d("brycegao", "onStartJob alive");        return false;    }    @Override    public boolean onStopJob(JobParameters jobParameters) {
        Log.d("brycegao", "onStopJob alive");        return false;    }
}
<service android:name=".MyJobService"    android:permission="android.permission.BIND_JOB_SERVICE"/>

我的微信公众号, 欢迎关注, 让我们一起成长

时间: 2024-10-12 05:19:22

Android5.0以上app进程保活的正确姿势的相关文章

android进程保活的几种方法

方案一: 开启一个像素的Activity 据说这个是手Q的进程保活方案,基本思想,系统一般是不会杀死前台进程的.所以要使得进程常驻,我们只需要在锁屏的时候在本进程开启一个Activity,为了欺骗用户,让这个Activity的大小是1像素,并且透明无切换动画,在开屏幕的时候,把这个Activity关闭掉,所以这个就需要监听系统锁屏广播. 方案二: 据说这个微信也用过的进程保活方案,该方案实际利用了Android前台service的漏洞.原理如下对于 API level < 18 :调用start

Android5.0 app界面与通知栏一体化

前言:         在Android5.0系统的手机上,可以将app界面与通知栏进行一体化显示. 1.首先我们先来看图 values-v11代表在 系统版本3.0的手机上会采用该文件夹下的样式 values-v21代表在 系统版本5.0的手机上会采用该文件夹下的样式 2.了解了values的版本适配后,我们接下来要在values-v21中加上设置通知栏一体化的代码 只需要添加android:colorPrimaryDark为其指定对应的颜色代码即可,是不是很简单呢? 3.为了展示其效果,我们

Android Studio 第六十八期 - Android8.0 进程保活

代码已经整理好,效果如下图: 地址:https://github.com/geeklx/myapplication2018/tree/master/p022_jincheng_baohuo 保活手段 当前业界的Android进程保活手段主要分为** 黑.白.灰 **三种,其大致的实现思路如下: 黑色保活:不同的app进程,用广播相互唤醒(包括利用系统提供的广播进行唤醒) 白色保活:启动前台Service 灰色保活:利用系统的漏洞启动前台Service 黑色保活 所谓黑色保活,就是利用不同的app

关于 Android 进程保活,你所需要知道的一切【转】

早前,我在知乎上回答了这样一个问题:怎么让 Android 程序一直后台运行,像 QQ 一样不被杀死?.关于 Android 平台的进程保活这一块,想必是所有 Android 开发者瞩目的内容之一.你到网上搜 Android 进程保活,可以搜出各种各样神乎其技的做法,绝大多数都是极其不靠谱.前段时间,Github还出现了一个很火的“黑科技”进程保活库,声称可以做到进程永生不死. 怀着学习和膜拜的心情进去Github围观,结果发现很多人提了 Issue 说各种各样的机子无法成功保活. 看到这里,我

关于 Android 进程保活,你所需要知道的一切

早前,我在知乎上回答了这样一个问题:怎么让 Android 程序一直后台运行,像 QQ 一样不被杀死?.关于 Android 平台的进程保活这一块,想必是所有 Android 开发者瞩目的内容之一.你到网上搜 Android 进程保活,可以搜出各种各样神乎其技的做法,绝大多数都是极其不靠谱.前段时间,Github还出现了一个很火的“黑科技”进程保活库,声称可以做到进程永生不死. 怀着学习和膜拜的心情进去Github围观,结果发现很多人提了 Issue 说各种各样的机子无法成功保活. 看到这里,我

Android进程保活全攻略(上)

对于每个公司的APP来说,当然都希望自己APP的进程尽量的不被杀死,于是乎,就有了一些列进程保活的方法出现,网上也有很多关于这类的文章,但网上很多资料往往只告诉了思路,并未将实现代码展示,本次我的博客将分为上下两篇,阐述关于进程保活的所有方法,以及实现的方式,若有错漏之处,大家可以在博客进行留言. ** 1.进程保活-背景知识 ** (1)什么时候系统会去杀死进程? Android系统会在内存不足的时候去将进程杀死,俗称Low Memory Killer,它是 基于linux内核的 OOM Ki

Android 进程保活招式大全

目前市面上的应用,貌似除了微信和手Q都会比较担心被用户或者系统(厂商)杀死问题.本文对 Android 进程拉活进行一个总结. Android 进程拉活包括两个层面: A. 提供进程优先级,降低进程被杀死的概率 B. 在进程被杀死后,进行拉活 本文下面就从这两个方面做一下总结. 1. 进程的优先级 Android 系统将尽量长时间地保持应用进程,但为了新建进程或运行更重要的进程,最终需要清除旧进程来回收内存. 为了确定保留或终止哪些进程,系统会根据进程中正在运行的组件以及这些组件的状态,将每个进

Android进程保活-自“裁”或者耍流氓

本篇文章是后台杀死系列的最后一篇,主要探讨一下进程的保活,Android本身设计的时候是非常善良的,它希望进程在不可见或者其他一些场景下APP要懂得主动释放,可是Android低估了"贪婪",尤其是很多国产APP,只希望索取来提高自己的性能,不管其他APP或者系统的死活,导致了很严重的资源浪费,这也是Android被iOS诟病的最大原因.本文的保活手段也分两种:遵纪守法的进程保活与流氓手段换来的进程保活. 声明:坚决反对流氓手段实现进程保活 坚决反对流氓进程保活 坚决反对流氓进程保活

Android5.0以下drawable tag vector错误的解决办法

Android5.0以下drawable tag vector错误的解决办法 在Androi 5.0以下的设备可能会报这样的错误: Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #1: invalid drawable tag vector 解决思路: 1.首先检查兼容性环境配置是否正确,判断是否是环境配置的问题导致出现以上问题的,如果是,请配置好环境,如果不是 请看步骤2 兼容性环境的配置: (1)