代码已经整理好,效果如下图:

    

    

    

    地址:https://github.com/geeklx/myapplication2018/tree/master/p022_jincheng_baohuo


    保活手段

    

    当前业界的Android进程保活手段主要分为** 黑、白、灰 **三种,其大致的实现思路如下:

    黑色保活:不同的app进程,用广播相互唤醒(包括利用系统提供的广播进行唤醒)

    白色保活:启动前台Service

    灰色保活:利用系统的漏洞启动前台Service


    黑色保活


    所谓黑色保活,就是利用不同的app进程使用广播来进行相互唤醒。举个3个比较常见的场景:

    场景1:开机,网络切换、拍照、拍视频时候,利用系统产生的广播唤醒app

    场景2:接入第三方SDK也会唤醒相应的app进程,如微信sdk会唤醒微信,支付宝sdk会唤醒支付宝。由此发散开去,就会直接触发了下面的 场景

    场景3:假如你手机里装了支付宝、淘宝、天猫、UC等阿里系的app,那么你打开任意一个阿里系的app后,有可能就顺便把其他阿里系的app给唤醒了。(只是拿阿里打个比方,其实BAT系都差不多)


    白色保活


    白色保活手段非常简单,就是调用系统api启动一个前台的Service进程,这样会在系统的通知栏生成一个Notification,用来让用户知道有这样一个app在运行着,哪怕当前的app退到了后台。如下方的LBE和QQ音乐这样


    灰色保活


    灰色保活,这种保活手段是应用范围最广泛。它是利用系统的漏洞来启动一个前台的Service进程,与普通的启动方式区别在于,它不会在系统通知栏处出现一个Notification,看起来就如同运行着一个后台Service进程一样。这样做带来的好处就是,用户无法察觉到你运行着一个前台进程(因为看不到Notification),但你的进程优先级又是高于普通后台进程的。那么如何利用系统的漏洞呢,大致的实现思路和代码如下:


    思路一:API < 18,启动前台Service时直接传入new Notification();

    思路二:API >= 18,同时启动两个id相同的前台Service,然后再将后启动的Service做stop处理;

    





更多相关文章

  1. Android(安卓)中 startService()启动service的过程分析
  2. Androidの短信拦截方法详解
  3. Android: Image类浅析(结合YUV_420_888)
  4. 转:Android(安卓)内存泄漏调试
  5. 面试题:IPC(跨进程通信)
  6. Android性能优化(一)App启动原理分析及启动时间优化
  7. 屏幕适配那点事
  8. Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
  9. 使用Android提供的android-support-v7出错

随机推荐

  1. Android(安卓)- Activity的启动模式
  2. 用android-logging-log4j去实现log输出内
  3. Android EditText密码框中字体和普通的输
  4. Android 访问权限设置记录-存档留着有用!
  5. 在 Android(安卓)中使用依赖注入 | Andro
  6. 目前最全的android恶意程序的分类谱
  7. 知识普及:Android手机操作系统构架
  8. 浅析Android的Context
  9. Android Studio常见报错汇总及解决方案
  10. Android Activity之间传递图片(Bitmap)的