关于 Service not registered: com.g

作者: 周公在世 | 来源:发表于2020-04-23 11:07 被阅读0次

Firebase使用过程中可能会出现 Service not registered: com.google.firebase.iid.zzw 这样的 Crash, 导致应用崩溃. 查看源码发现是 com.google.android.gms:play-services-basement:17.0.0 这个库中的 com.google.android.gms.common.stats.ConnectionTracker#unbindService() 尝试 unbind 没有注册的 Service, 最新的 17.2.1 中的 ConnectionTracker 添加了一个 unbindServiceSafe(), 它对 unbindService 进行了 try-catch, 但是奇怪的是 Firebase 的其他类并没有调用过这个方法, 估计可能后续版本会修复这个问题, 但是目前的只能靠我们开发者自己修复了.

之前尝试过修复一次, 使用反射替换了内部的 Executor, 但是后面还是出现了这样的崩溃. 猜测是其他的地方调用了 unbindService(). 后续尝试了其他的方法,但都以失败告终. 最终发现了一个应该能完美解决的方法. Firebase 采用 FirebaseInitProvider 来无侵入的获取 Context, 而这个 Context 就是 Application 的实例, 所以我们重写 Application#unbindService() 即可, 最终调用的 unbindService() 都会在这里被捕获:

    override fun unbindService(conn: ServiceConnection) {
        try {
            super.unbindService(conn)
        } catch (e: IllegalArgumentException) {
            // do something, ignore or report...
        }
    }

相关文章

  • 关于 Service not registered: com.g

    Firebase使用过程中可能会出现 Service not registered: com.google.fir...

  • 2018-08-01 Spring-boot, dubbo, m

    Since the service-interfaces are registered onto zoo-keep...

  • 2018-10-25

    注册服务协议(Registered service agreement) 《游戏许可及服务协议》(以下简称“本协议...

  • charles系列破解激活办法

    点击工具栏上面Help,进入Registered。 更改Registered Name 和License Key即...

  • rest与webservice

    关于Web Service和Rest Service的理解

  • Receiver not registered

    Receiver not registered 这个错误产生的原因:是在我们销毁广播的时候会产生的这个错误:翻译后...

  • 关于Service

    Service是Android四大组件之一,是一种运行在后台的服务,通常不需要和用户交互。Service默认是运...

  • 关于Service

    Service是一种不提供用户交互页面但是可以在后台长时间运行的组件,可以通过在AndroidManifest.x...

  • 关于service

    关于service比较全面的介绍 http://blog.csdn.net/guolin_blog/article...

  • 关于Service

    前言 Service 是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。 Service 可由其他应用...

网友评论

    本文标题:关于 Service not registered: com.g

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