正确引导用户添加白名单,这个方法可以非常有效的进行保活,使用了这个库:https://github.com/xingda920813/HelloDaemon 代码位置在:Daemon-simple\daemonsdk\src\main\java\com\revenco\daemon\java 包
native层的暴力监听保活方案,也可以达到较好的效果,但是对于新的机型版本有可能失效,使用了这个库:https://github.com/Marswin/MarsDaemon 代码位置在:Daemon-simple\daemonsdk\src\main\java\com\revenco\daemon\natives 包
添加了一些提高进程优先级的方案,比如不可见的notifycation,锁屏情况下的一个像素透明的activity,账户同步功能
使用了第三方app开启的唤醒功能,反编译了各大主流的app,添加ACTION配置,仿造他们的service,以便可能被隐式启动
添加了第三方的推送服务配置,包括极光推送,小米推送,华为推送,信鸽推送,百度推送,个推推送,以便可以在同一个设备上有可能集成相同推送的app启动时候可以唤醒
特性功能:
如果同一个设备有多个APP集成了这个保活库,则启动任何一个APP将会通过隐式启动的方式唤醒未启动的服务。
1、引导用户添加白名单的方式,这种方式是最可靠最友好的保活方式,并且不受Android系统版本的限制。
2、native层的保活方式,可以参照原作者的博客,有详细讲解,虽然实际测试中有部分的机型达不到预期的效果,但是这不失为一个非常好的解决方案。
3、根据不同的Android系统版本,利用Android的系统漏洞,或者一些系统的特性的保活手段
3.1、在API19 以下,设置空的notification,而不显示在通知栏的方式漏洞,可以提升进程的优先级。
3.2、在锁屏时候,启动一个一个像素的Activity,提升进程优先级,避免在某些机型在锁屏时候进程被kill,适用于任何的系统版本。
3.3、增加了账户同步功能,此账户同步功能为空实现,仅仅是让系统定时触发同步功能一达到唤醒我们的服务,适用于任何的系统版本,弊端是,1、在系统设置下面可以看到账户信息,2、系统的下拉快捷方式那里关闭了自动同步功能的话,将失效,但是,此方案还是不错的。
3.4、增加了看门狗守护服务(在第一点中实现),定时查看服务的状态。
4、反编译各大主流app,在AndroidManifest上配置ACTION,可以在一定的程度上唤醒,适用于任何的系统版本,有测试成功案例:被百度云盘唤醒。
5、添加第三方推送的配置,仿造一些服务和接收器,可以在一定的程度上唤醒,适用于任何的系统版本,有测试成功案例:启动了集成极光推送的app,可以被唤醒。
compile 'com.idba:daemonsdk:+'
2.1 配置核心业务Service 和一个 辅助的 receive(注意:必须配置在同一个进程中)
<!--下面的辅助接收器和核心业务服务必须配置在同一个进程中______________start-->
<receiver
android:name=".wakeup.assistantReceiver"
android:enabled="true"
android:exported="true"
android:process=":business">
</receiver>
<service
android:name=".TraceServiceImpl"
android:enabled="true"
android:exported="true"
android:process=":business">
</service>
<!--下面的辅助接收器和核心业务服务必须配置在同一个进程中______________end-->
2.2 配置核心的广播接收器,
<!--唤醒接收器必须在application模块,只需要定义两个SDK内部的ACTION即可,便于唤醒 业务服务_________start-->
<receiver
android:name=".wakeup.WakeUpReceiver"
android:process=":watch">
<intent-filter>
<!--用于取消服务工作,定义在SDK内部-->
<action android:name="com.revenco.daemon.java.CANCEL_JOB_ALARM_SUB"/>
<!--更加多的唤醒方式,在SDK内部实现,然后外发这个ACTION广播,实现唤醒-->
<action android:name="com.revenco.daemon.java.ACTION_WAKE_UP_BY_MORE_METHOD"/>
</intent-filter>
</receiver>
<!--唤醒接收器必须在application模块,只需要定义两个SDK内部的ACTION即可,便于唤醒 业务服务_________end-->
/**
* 在子线程配置,避免阻塞主线程
*/
private void Start() {
new Thread(new Runnable() {
@Override
public void run() {
//主要的业务逻辑进程
String processName = "com.revenco.app:business";
String serviceName = TraceServiceImpl.class.getCanonicalName();
String receiveName = assistantReceiver.class.getCanonicalName();
DaemonManager.INSTANCE.init(MainActivity.this, processName, serviceName, receiveName);
if (BuildConfig.DEBUG)
//Debug模式开启控制台LOG日志,部分唤醒日志则会记录到SDCard,方便观察app如何被唤醒的日志
DaemonManager.INSTANCE.initLogFile(MainActivity.this);
//配置
DaemonEnv.initialize(MainActivity.this, TraceServiceImpl.class, DaemonEnv.DEFAULT_WAKE_UP_INTERVAL);
try {
//启动
startService(new Intent(MainActivity.this, TraceServiceImpl.class));
} catch (Exception e) {
}
}
}).start();
}
assistantReceiver 类 :
/**
* 辅助接收器,空实现即可
*/
public class assistantReceiver extends BroadcastReceiver {
public assistantReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
}
}
WakeUpReceiver 类:
/**
* 这个接收器唤醒业务服务,这里唤醒业务服务
*/
public class WakeUpReceiver extends BroadcastReceiver {
private static final String TAG = "WakeUpReceiver";
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null && Constant.ACTION_CANCEL_JOB_ALARM_SUB.equals(intent.getAction())) {
WatchDogService.cancelJobAlarmSub();
return;
}
//动态注册屏幕解锁开锁ACTION,等等以及自定义的其他广播,以唤醒app
try {
XLog.log2Sdcard(TAG, "ACTION = " + intent.getAction() + " --> 唤醒业务服务!");
context.startService(new Intent(context, TraceServiceImpl.class));
} catch (Exception e) {
e.printStackTrace();
}
}
}
IntentWrapper.whiteListMatters(this, "为了确保APP接收消息的实时性,将添加到白名单。");
- 阿里系列APP: 支付宝,淘宝,天猫,UC浏览器,钉钉
- 腾讯系列APP:微信,QQ,QQ空间,应用宝
- 百度系列APP:百度云盘
- 音乐类APP:酷狗音乐,网易云音乐
- 美食类APP:美团
- 其他APP:ofo,膜拜单车,优酷,爱奇艺
- 极光推送
- 信鸽推送
- 小米系统推送
- 华为系统推送
- 百度云推送
- 个推推送
反编译各大主流app,仿造他们的Service 和 BroadcastReceive的ACTION等配置,以及增加推送配置
不受Android系统版本限制,可以在一定程度上通过隐式启动Service 或者 广播的方式 增加被唤醒的成功率
- 极光推送互相唤醒
- 华为推送可以唤醒(测试发现一次)
- 百度推送可以换醒(百度网盘)
- 网络变化可以唤醒
- android.intent.TIME_SET 可以唤醒
- Android Doze 模式
- 华为 自启管理
- 华为 锁屏清理
- 小米 自启动管理
- 小米 神隐模式
- 三星 5.0/5.1 自启动应用程序管理
- 三星 6.0+ 未监视的应用程序管理
- 魅族 自启动管理
- 魅族 待机耗电管理
- Oppo 自启动管理
- Vivo 后台高耗电
- 金立 应用自启
- 金立 绿色后台
- 乐视 自启动管理
- 乐视 应用保护
- 酷派 自启动管理
- 联想 后台管理
- 联想 后台耗电优化
- 中兴 自启管理
- 中兴 锁屏加速受保护应用