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

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

地址: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处理;

原文地址:http://blog.51cto.com/liangxiao/2150469

时间: 2024-08-26 12:16:50

Android Studio 第六十八期 - Android8.0 进程保活的相关文章

Android Studio - 第四十八期 模块ViewPager+Fragment

最近一直在review撸撸的代码,发现了一种模块的写法,非常不错,独立出来,希望能帮到你~ 如果你遇到这样的页面,怎么办,不会把所有代码都写到一个页面中吧~,这样看你代码的人会骂死你的吧~我想~而且如果不同的版本要用不同的位置,大小也不一样,难道你要重新布局嘛~这都是开发中需要纠结的,下面就开始正题了,这是利用了以前讲过的多版本打版以及配置多Fragment加载巧妙的解决了复杂的页面逻辑,我数了数,首页代码不到一百行,厉害吧~哈哈哈哈~ 在写这样的页面之前给大家介绍一下怎么写一个页面模块代码.

Android Studio 第六十四期 - Android业务组件化之URL Scheme使用

什么是 URL Scheme? android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面:通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等. URL Scheme应用场景: 客户端应用可以向操作系统注册一个 URL scheme,该 scheme 用于从浏览器或其他应用中启动本应用.通过指定的 URL 字段,可以让应用在被调起后直接打开某

Android Studio第三十八期 - HIOS跳转协议解决URI跳转原生页面并传递参数

代码已经整理好,效果如下图: 图1: 图2: 图3: 地址:https://github.com/geeklx/MyApplication/tree/master/p022_hois HiosRegister: package com.example.p022_hois.hioscommon; import com.example.p022_hois.hoisjump.HiosAlias; public class HiosRegister {     private static final 

Android Studio 第五十八期 - Android屏幕亮度与休眠

代码已经整理好,效果如下图: 地址:https://github.com/geeklx/myapplication2018/tree/master/p002_screen_light APK地址:http://down.51cto.com/data/2441477 原文地址:http://blog.51cto.com/liangxiao/2083002

Android Studio 第六十五期 - Android业务组件库

目前市面上常用的效果集合,持续更新: 地址:https://github.com/geeklx/APPkuangjia/tree/master/baselibrary/src/main/java/com/haier/cellarette/baselibrary 附文档: 此类放置自定义View和第三方控件集合:(按顺序) anroomcrash:验证APP崩溃和内存溢出的方法 assetsfitandroid:1.拍照上传                   2.复制assets目录到本地缓存c

Android Studio 第六十九期 - Android 加入购物车动画 一行

代码已经整理好,效果如下图: 地址:https://github.com/geeklx/myapplication2018/tree/master/p012_interpolator_addshoppingcar 原文地址:http://blog.51cto.com/liangxiao/2150517

Android Studio 第六十期 - Android推流直播(斗鱼部分页面功能)

代码已经整理好,效果如下图: 地址:https://github.com/geeklx/myapplication2018/tree/master/p004_livedemo 原文地址:http://blog.51cto.com/liangxiao/2085562

Android Studio - 第四十五期 Gradle manifestPlaceholders

最近在学习撸撸的代码规范和写法,有些心得,准备好好写一写~包括了多渠道打版(以前有写过方法),工厂模式,mvp,以及最近刚封装出来的多渠道多版本展示不同页面的manifestPlaceholders的配置方法,大家应该也碰到过线上和线下环境的切换换地址,换私钥的头大问题,本篇就来解决这些问题. 先在androidmanifest文件配置一个节点,这里以极光为例: <meta-data             android:name="JPUSH_APPKEY"         

Android Studio第三十九期 - popWindows置顶

/** * Window type: system window, such as low power alert. These windows * are always on top of application windows. * In multiuser systems shows only on the owning user's window. */ setWindowLayoutType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);