做网站的标题图片,郑州服装 网站建设,视频公司的网站设计,四川网站建设哪家好Android 后台保活手段总结 (上篇)由于众所周知的限制#xff0c;在国内无法使用GCM推送服务#xff0c;想要自己搭建推送服务的话#xff0c;有两个绕不开的技术点#xff0c;一个是TCP长连的保活#xff0c;另一个就是后台进程的保活。虽然看起来是老生常谈的问题#x…Android 后台保活手段总结 (上篇)由于众所周知的限制在国内无法使用GCM推送服务想要自己搭建推送服务的话有两个绕不开的技术点一个是TCP长连的保活另一个就是后台进程的保活。虽然看起来是老生常谈的问题但竟然是收到私信里问到最多的内容。于是在这里做一个目前接触的保活手段做一个总体的总结常规保活方案利用Notification提升权限Android 中 Service 的优先级为4通过 setForeground 接口可以将后台 Service 设置为前台 Service使进程的优先级由4提升为2从而使进程的优先级仅仅低于用户当前正在交互的进程与可见进程优先级一致使进程被杀死的概率大大降低。需要注意的是在最新的Android 8.0系统上setForeground变成了强制性的行为任何后台Service都必须调用这个方法否则五秒钟后系统强制ANR Crash。这里涉及到另外的一个坑是——哪怕你的Service只是做点业务逻辑后销毁也需要先调用这个接口因为不同的国产ROM重新定义了“五秒钟”(手动滑稽)你以为只需要占用1秒的业务逻辑上线都可能分分钟崩溃给你看。然而调用这个API后系统通知栏上会显示“XXX应用在后台运行”无法去掉。8.1系统上已经去掉了这个很不友好的通知栏常驻显示。利用系统广播拉活在发生特定系统事件时系统会发出响应的广播通过在 AndroidManifest 中“静态”注册对应的广播监听器即可在发生响应事件时主动尝试拉活Service。可以用于拉活的广播事件包括备注广播事件开机RECEIVE_BOOT_COMPLETED网络变化ACCESS_NETWORK_STATE CHANGE_NETWORK_STATE ACCESS_WIFI_STATE CHANGE_WIFI_STATE ACCESS_FINE_LOCATION ACCESS_LOCATION_EXTRA_COMMANDS文件挂载MOUNT_UNMOUNT_FILESYSTEMS屏幕状态变化SCREEN_ON SCREENOFF锁屏解锁RECEIVER_USER_PRESENT应用卸载安装PACKAGE_REMOVED PACKAGE_ADDED在Android 8.0系统上这个方法已经不生效了因为8.0系统已经去掉了这种静态广播注册的形式系统广播必须使用动态注册即应用启动后registerReceiver在Manifest里配置广播已经无法生效。另外在某些深度定制的系统上效果一般比如华为系统上应用进程一旦终止无法使用系统广播的形式重新唤起。利用系统Service START_STICKY机制拉活将 Service 设置为 START_STICKY利用系统机制在 Service 挂掉后自动拉活。最基本的方式不解释了。利用Native进程拉活Native双进程守护的方式曾经风靡一时被当做“黑科技”然而遗憾的是实际上效果一般仅仅在5.0以下系统兼容较好深度定制的系统中魅族、华为、小米等都效果略差。从recent中杀进程后无法重新拉起后台一段时间以后也会被杀掉。仅适合5.0以下版本仍然较高的APP采用这种方法。