Android保活系列之——双进程守护

作者: 夏天吃冰棍 | 来源:发表于2019-08-07 17:14 被阅读22次

    本文为个人学习笔记分享,没有任何商业化行为,对其他文章的引用都会标记。如有侵权行为,请及时提醒更正!如需转载请表明出处
    Android保活相关博客大纲
    希望看了的小伙伴都关注一下。

    近期跳槽到玩加电竞,加之英雄联盟云顶之弈排位模式的推出,导致个人精力有限没有时间和心情去写相关的博客。

    问题1:什么是双进程守护?

    在Context中提供了bindService的方法

        @Override
        public boolean bindService(Intent service, ServiceConnection conn,
                int flags) {
            return mBase.bindService(service, conn, flags);
        }
    
    

    绑定服务是客户端--服务器接口中的服务器。组件和服务进行绑定后,可以发送请求、接收响应、执行进程间通信(IPC)。这里的服务器模型不同于网络C-S模型而是针对于Android应用不同的功能进行进程划分,例如提供视频播放的进程我们可以把它当做视频播放服务器,我们UI层属于客户端,客户端想要调用视频播放,需要用IPC方式通过bind服务的方式调用视频播放服务。(PS:如果大家对IPC不太熟悉可以参考我的其他文章Android跨进程通信技术的使用及原理)客户端可以通过调用bindService()绑定到服务。调用时,必须提供ServiceConnection的实现,后者会监控与服务的连接及销毁。
    借助bindService的机制,我们可以在主进程创建时创建一个守护进程,并监听守护进程的连接及销毁,再守护进程bindService中绑定主进程,这样即使进程因为锁屏、内存等问题杀掉后,也会被守护进程拉起,这就是Android中双进程守护的概念。当然早在PC时期,网吧的计时系统就使用了双进程守护机制,防止被恶意杀掉。
    实现方式就不写了,网络上一搜一堆,这里给出一篇文章
    Android 双进程守护
    写的中规中矩,如果不清楚如何实现可以看一下。

    8.0适配

    谷歌官方8.0变更

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                applicationContext.startForegroundService(new Intent(sApp, TraceServiceImpl.class));
            } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
                applicationContext.startService(new Intent(sApp, TraceServiceImpl.class));
            }
    

    当版本>8.0时,如果需要在后台启动服务需要调用startForegroundService。并且在serivce中onCreate方法必须在5秒内调用startForeground ,向通知栏发一个通知告知用户你的App正在后台运行,否则就会抛出异常

        @Override
        public void onCreate() {
            super.onCreate();
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                //这样写有bug,在有些手机上会报错。
                //需要一个真实的Notification且需要给Notification设置Chanel。
                startForeground(0x12345, new Notification());
            }
        }
    

    8.0通知适配

    其他的一些思维扩展

    保活分两种:拉活、保活
    拉活和保活是相辅相成的。在6.0版本以后的机型上,系统杀应用是按照进程组杀的,会直接导致双进程守护失效。那么因此就不使用双进程了么?
    1.低版本双进程守护是依然亲测好使。
    2.双进程守护可以和后面讲到的 账号同步、外部PUSH、JobScheduler
    相结合,可以规避开系统杀进程组的问题。使双进程守护功能可以兼容高版本。

    最后一些话

    讲的有些笼统,我寻思的发Dome、写例子,但这样解决不了根本问题,只有懂得了思路,了解了什么是双进程守护,才能在开发中随机应变。只能说Android水太深,大家需要细心细心再细心。

    相关文章

      网友评论

        本文标题:Android保活系列之——双进程守护

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