史上最全android保活方案及比较分析

方案对比

方案名称 方案简述 优点 缺点 适用情况
1像素保活 在屏幕关闭时打开一个1px的activity,屏幕亮时关闭此activity 易于实现 锁屏时才能提高优先级,不稳定 适用于搭配其他方案一起使用
前台服务保活 启动一个前台服务,提高应用的优先级 系统机制 增加冗余服务 适用于常用保活
广播拉活 在接收到特定广播时拉起应用 易于实现 小厂使用,不够稳定 可作为辅助方案
sticky拉活 利用service的粘性来拉起应用 系统唤醒,方式文明 应用被杀死4-5次后系统不再拉起应用 此方式效果不明显,不推荐
账户同步拉活 利用账户同步机制拉活 系统唤醒,比较稳定 时间不能把控 适用于间隔性拉活需求,应用不需要持续存在
JobScheduler拉活 定时任务拉起应用 保活稳定 非常消耗性能 适用于流氓应用
双进程保活 两个进程相互拉起来保活 稳定 增加系统开销 适用于常用保活

注:需要注意的是上述保活指的是仅能提高进程优先级,系统不会自动杀死,但是如果用户主动杀死,应用便死了,拉活指的是被用户杀死仍然可以再拉起来,在低版本和部分厂商机型上适用,但在部分厂商和高版本安卓系统中,清理时会全部杀死,除非加入系统白名单,但上述方式仍可以使用来提高进程优先级,使系统自动清理时不杀死我们的应用

代码

github地址:https://github.com/dingjiaxing/KeepAliveDemo/

方案详细说明

1像素保活

  1. 描述
    在屏幕关闭时打开一个1px的activity,屏幕亮时关闭此activity,因为在屏幕关闭时activity处于前台,所以系统将会把我们应用的优先级提高,从而遇到内存达到阈值时便不会杀死我们应用
  2. 关键代码
//1像素的activity,主题设为透明
public class OnePixelActivity extends Activity{
    private static final String TAG = "OnePixelActivity";
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Window window=getWindow();
        window.setGravity(Gravity.START|Gravity.TOP);
        WindowManager.LayoutParams params=window.getAttributes();
        params.width = 1;
        params.height = 1;
        params.x = 0;
        params.y = 0;
        window.setAttributes(params);
        KeepManager.getInstance().setOnePixelActivity(this);
    }
}
//广播接受者,接受广播
public class OnePixelKeepReceiver extends BroadcastReceiver {
    private static final String TAG = "OnePixelKeepReceive
  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值