关于Android进程保活

1、前台service:

    启动一个前台service,这样该service所在的进程优先级会是0,也就是正在使用的前台进程,基本不会被杀死了。

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        LogUtils.iTag(LOG_TAG , "KeepLiveService start !!!");
        Notification.Builder builder = new Notification.Builder(getApplicationContext());

        Intent shelfIntent = new Intent(this , BookshelfActivity.class);
        builder.setContentIntent(PendingIntent.getActivity(this , 0 , shelfIntent , PendingIntent.FLAG_CANCEL_CURRENT))
                .setLargeIcon(BitmapFactory.decodeResource(getResources() , R.mipmap.ic_launcher))
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("Reader is running")
                .setContentText("dont clear this notification")
                .setWhen(System.currentTimeMillis());
        Notification notification = builder.build();
        startForeground(KEEP_LIVE_NOTIFY_ID , notification);
        return super.onStartCommand(intent, flags, startId);
    }

具体做法就是在一个service的onStartCommand回调中,使用startForeground,它会在系统通知栏上放置一个notification,从而让该服务变成前台服务。

比较适合的例如音乐类软件。

2、接入各种推送。

各种推送sdk一般都会唤醒该手机接入了同样sdk的应用。像我们现在的手机,基本上就是打开一个应用,那么它连带着可能就唤醒了一大票应用,这也是为什么Android手机应用安装的越多,后期越卡的原因之一吧。

3、系统白名单。

这就是大厂应用的专属了,qq,微信等皆在此列。当然,他们也会有一些自己的保活手段,比如之前听说过的,在屏幕上保持一个1像素的界面,从而让自己始终处于前台。
 

 

最后,最简单靠谱的应该就是1和2了,其中关于前台服务,也看有人研究过可以想办法达到隐藏通知的效果。用两个服务分别启动一个相同id的前台服务,然后后把后一个服务杀死。但是这个方法应该是在Android7.1之后就被修复了,不可以启动两个相同notificationId的前台服务。

还有双进程守护,那应该是5.0之后就被修复了。

你可能感兴趣的:(Android)