Skip to content

保活机制使用

xuexiangjys edited this page Sep 3, 2019 · 2 revisions

keeplive

这里提供的应用保活机制也是借鉴了前人终结出来的各种方案的混合处理。目前在9.0及以下版本都能有很好的保活效果(只要你不主动杀死程序),如果你的应用希望能够一直在后台运行(比如推送服务)而不被系统自动杀死的话,可以尝试一下。需要注意的是,程序保活并不代表能做到程序杀不死,除非你把你的应用做成系统应用或者加入到系统的白名单内,否则也只是提高了程序的优先级权重,减少程序被系统回收杀死的概率而已。

快速集成指南

添加Gradle依赖

1.先在项目根目录的 build.gradle 的 repositories 添加:

allprojects {
    repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}

2.添加keeplive依赖:

dependencies {
  ...
  //推送保活库
  implementation 'com.github.xuexiangjys.XPush:keeplive:1.0.0'
}

初始化keeplive

在Application中初始化keeplive:

/**
 * 初始化保活,配置完成后即可实现程序的保活
 */
private void initKeepLive() {
    //定义前台服务的默认样式。即标题、描述和图标
    ForegroundNotification notification = new ForegroundNotification("推送服务", "推送服务正在运行中...", R.mipmap.ic_launcher,
            //定义前台服务的通知点击事件
            new ForegroundNotificationClickListener() {
                @Override
                public void onNotificationClick(Context context, Intent intent) {
                    //可以做一些唤醒程序的操作,这里只是简单地启动了应用
                    AppUtils.launchApp(getPackageName());
                }
            })
            //要想不显示通知,可以设置为false,默认是false
            .setIsShow(true);
    //启动保活服务
    KeepLive.startWork(this, KeepLive.RunMode.ENERGY, notification,
            //你需要保活的服务,如socket连接、定时任务等,建议不用匿名内部类的方式在这里写
            new KeepLiveService() {
                /**
                 * 运行中
                 * 由于服务可能会多次自动启动,该方法可能重复调用
                 */
                @Override
                public void onWorking() {
                    //可以做一些保活的处理,比如说恢复推送连接等
                }

                /**
                 * 服务终止
                 * 由于服务可能会被多次终止,该方法可能重复调用,需同onWorking配套使用,如注册和注销broadcast
                 */
                @Override
                public void onStop() {
                    //该回调方法可能会不回调
                }
            }
    );
}

停止保活

使用KeepLive.stopWork()即可停止保活机制。

应用白名单设置

除了使用以上的保活机制之外,我们还可以引导用户将该应用设置到手机系统的白名单页面,这样可能大大提高保活的效果。

获取当前手机匹配的白名单设置跳转意图

KeepLive.getMatchedWhiteListIntent();

处理设置白名单的意图

KeepLive.gotoWhiteListActivity(this, "推送服务");

自定义白名单意图处理

//自定义设置白名单跳转意图的数据提供
KeepLive.setIWhiteListProvider(new IWhiteListProvider() {
    @Override
    public List<WhiteListIntentWrapper> getWhiteList(Application application) {
        //增加适合的设置白名单的跳转意图
        return null;
    }
});
//自定义设置白名单的显示处理
KeepLive.setIWhiteListCallback(new IWhiteListCallback() {
    @Override
    public void init(@NonNull String target, @NonNull String appName) {

    }

    @Override
    public void showWhiteList(@NonNull Activity activity, @NonNull WhiteListIntentWrapper intentWrapper) {
        //显示设置白名单的跳转意图
    }

    @Override
    public void showWhiteList(@NonNull Fragment fragment, @NonNull WhiteListIntentWrapper intentWrapper) {
        //显示设置白名单的跳转意图
    }
});

保活的模式(RunMode)

模式名 简称 备注
ENERGY 省电模式 省电一些,但保活效果会差一点
ROGUE 流氓模式 相对耗电,但保活更好