美文网首页
android app保活笔记

android app保活笔记

作者: 小吵闹123 | 来源:发表于2017-05-03 11:09 被阅读695次

    黑色保活

    利用不同app进程使用的广播唤醒

    • 开机、网络切换、拍照的系统广播
    • 第三方SDK的广播
    • 应用间的广播,BAT全家桶

    灰色保活

    • API < 18,启动前台Service时直接传入new Notification()
    • API >= 18,同时启动两个id相同的前台Service,然后再将后启动的Service做stop处理
    public class GrayService extends Service {
    
        private final static int GRAY_SERVICE_ID = 1001;
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            if (Build.VERSION.SDK_INT < 18) {
                startForeground(GRAY_SERVICE_ID, new Notification());//API < 18 ,此方法能有效隐藏Notification上的图标
            } else {
                Intent innerIntent = new Intent(this, GrayInnerService.class);
                startService(innerIntent);
                startForeground(GRAY_SERVICE_ID, new Notification());
            }
    
            return super.onStartCommand(intent, flags, startId);
        }
    
        ...
        ...
    
        /**
         * 给 API >= 18 的平台上用的灰色保活手段
         */
        public static class GrayInnerService extends Service {
    
            @Override
            public int onStartCommand(Intent intent, int flags, int startId) {
                startForeground(GRAY_SERVICE_ID, new Notification());
                stopForeground(true);
                stopSelf();
                return super.onStartCommand(intent, flags, startId);
            }
    
        }
    }
    

    查看是否有app使用这种方式,在adb shell下dumpsys activity services PackageName,是否有isForeground=true但是通知栏没有通知的情况

    白色保活

    启动一个前台service,会在系统通知栏中显示

    AccountManager

    参考https://juejin.im/entry/574076f52e958a0069101458

    oom_adj

    什么是oom_adj?它是linux内核分配给每个系统进程的一个值,代表进程的优先级,进程回收机制就是根据这个优先级来决定是否进行回收。对于oom_adj的作用,你只需要记住以下几点即可:

    • 进程的oom_adj越大,表示此进程优先级越低,越容易被杀回收;越小,表示进程优先级越高,越不容易被杀回收
    • 普通app进程的oom_adj>=0,系统进程的oom_adj才可能<0

    查看oom_adj
    cat /proc/进程ID/oom_adj

    相关文章

      网友评论

          本文标题:android app保活笔记

          本文链接:https://www.haomeiwen.com/subject/rhektxtx.html