我已经在我发布的应用中实现了接收广播意图,实际上将在不久的将来完成发送。但是,已经收到了意图,并且由于缺少必需的Bundle Extras,它可能会崩溃。看到此崩溃后,我想使用LocalBroadcastManager
,但现在的问题是这是否是一种好习惯。
BroadcastReceiver
未在清单中注册,但在Application
类中:
class App : Application() {
override fun onCreate() {
super.onCreate()
registerReceiver(NotificationBroadcastReceiver(), IntentFilter("com.me.my_app.REUPLOAD_REQUESTED.open_notification"))
}
}
现在,我在Crashlytics中收到一个用户的崩溃信息,每小时发生25次:
Fatal Exception: java.lang.RuntimeException
Error receiving broadcast Intent { act=com.me.my_app.REUPLOAD_REQUESTED.open_notification flg=0x10 pkg=com.me.my_app (has extras) } in d.a.a.a.v.b.a@41e45b2
那么什么或谁发送这些意图?可以由用户自己完成吗?
是否使用LocalBroadcastManager
我的应用程序有4个模块:一个包含Application
和一些Dagger模块,另一个是用于数据/域/表示层的模块。使用广播的原因是因为有两个松散耦合的组件:
在数据层FirebaseMessagingService
中收到一条FCM消息,作为响应,它向NotificationBroadcastReceiver
发送一个Intent,该Intent负责显示通知并处理与该通知的交互。
应该使用LocalBroadcastManager吗?这不是实际的IPC,只是一个包含BroadcastReceivers列表的单例。它打包在androidx中,目前还没有标记为不推荐使用。
如果没有,应该使用什么?
答案 0 :(得分:1)
看到此崩溃后,我将使用LocalBroadcastManager
LocalBroadcastManager
已过时。某些人认为这种用于过程内部通信的“事件总线”模式是一种不良的编程实践。
那么什么或谁发送这些意图?可以由用户自己完成吗?
好的。攻击者将发起攻击。可能是通过adb shell
,或者是攻击者编写的一些自定义应用程序,或者是某些自动化的安全扫描应用程序。
请勿在应用程序进程内使用IPC(registerReceiver()
上的Context
)进行通信。