我的应用程序在通过FCM收到通知时崩溃,并出现错误";无法实例化服务…:java.lang.ClassCastException:…不能强制转换为android.app.Service">
我正在根据手册通过Firebase云消息实现android应用程序通知。我仔细检查了一下,所有的事情都按照手册做得很好,并看到了一些相关的stackoverflow问题,但仍然无法解决问题:(我的两个build.gradle文件都是按照手册更新的。
调试之前,AndroidManifest文件在com.exa.myproject.unsorted.NotificationService:行突出显示错误
<service
android:name="com.exa.myproject.unsorted.NotificationService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
表示com.exa.myproject.usorted.NotificationService";必须扩展android.app.Service";。
然而,在服务文件中,它已经继承了:
class NotificationsService : FirebaseMessagingService()
而FirebaseMessagingService则应该从服务本身继承。尽管如此,该应用程序编译和运行良好。然而,当我从FCM Firebase控制台发送测试通知时,应用程序崩溃(显然收到的消息与后台NotificationService有关(,并且不高兴被转移到Android服务:
D/AndroidRuntime:关闭VME/AndroidRuntime:致命异常:main流程:com.exa.myproject,PID:30746java.lang.RuntimeException:无法实例化服务com.exa.myproject.usorted.NotificationService:java.lang.ClassCastException:com.exa.myproject.usored.NotificationService无法在android.app.ActivityThread.handleCreateService(ActivityThreads.java:4155(上强制转换为android.app/service在android.app.ActivityThread.access$1600(ActivityThreads.java:232(在android.app.ActivityThread$H.handleMessage(ActivityThreads.java:2033(在android.os.Handler.dispatchMessage(Handler.java:107(在android.os.Looper.loop(Looper.java:241(在android.app.ActivityThread.main(ActivityThreads.java:7604(位于java.lang.reflect.Method.ioke(本机方法(网址:com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492(网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:941(引起原因:java.lang.ClassCastException:com.exa.myproject.unsorted.NotificationService无法转换为android.app.Service在android.app.AppComponentFactory.instantiateService(AppComponentFactory.java:129(位于androidx.core.app.CoreComponentFactory.instantiateService(CoreCompoonentFactory.java:75(在android.app.ActivityThread.handleCreateService(ActivityThreads.java:4150(在android.app.ActivityThread.access$1600(ActivityThreads.java:232(在android.app.ActivityThread$H.handleMessage(ActivityThreads.java:2033(在android.os.Handler.dispatchMessage(Handler.java:107(在android.os.Looper.loop(Looper.java:241(在android.app.ActivityThread.main(ActivityThreads.java:7604(位于java.lang.reflect.Method.ioke(本机方法(网址:com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492(网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:941(I/Process:发送信号。PID:30746 SIG:9
不幸的是,Kotlin不允许同时从两个类继承这些类。否则,除了FirebaseMessagingService之外,我还会从Service继承NotificationService。
最后我找到了一个解决方案,所以这是一个伪情况。由于多次合并,创建了同一文件的2个副本。因此,最终我在存储库中有了2个服务(2个Kotlin类(:
- 通知服务
- NotificationS服务在AndroidManifest文件中只引用了其中一个。那是不恰当的。所以最终我删除了不合适的文件,引用了合适的文件。对我来说,教训是在出现错误的情况下,跟踪所有引用的所有链式方式,尤其是那些在类之外、文件之外的引用。编译器并不总是显示问题的直接根本原因