我已经在我发布的应用程序中实现了接收广播意图,实际上发送它们将在不久的将来完成。然而,意图已经收到,它崩溃的预期,因为强制性的捆绑附加是缺失的。在看到这次崩溃之后,我想使用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那么是谁在发送这些意图呢?它能由用户自己来完成吗?
使用或不使用
我的应用程序有4个模块:一个包含Application和一些Dagger模块,还有一个单独的模块用于数据/域/表示层。之所以使用广播,是因为有两个松散耦合的组件:在数据层,FirebaseMessagingService接收一个FCM消息,该消息响应于向NotificationBroadcastReceiver发送意图,NotificationBroadcastReceiver负责显示通知并处理与该通知的交互。
应该使用LocalBroadcastManager吗?这不是实际的IPC,它只是一个保存BroadcastReceivers列表的单例。它被包装在雄激素内,目前还没有被标记为不受欢迎。
如果没有,应该使用什么?
发布于 2020-06-11 10:44:53
在看到这次崩溃后,我将使用LocalBroadcastManager
LocalBroadcastManager已经被否决了。这种用于进程内部通信的“事件总线”模式被一些人认为是一种糟糕的编程实践。
,那么是谁在发送这些意图呢?它能由用户自己来完成吗?
好的。袭击者要进攻了。它可以通过adb shell,或者通过攻击者编写的自定义应用程序,或者可能通过一些自动安全扫描应用程序。
不要在应用程序的进程中使用IPC (registerReceiver() on Context)进行通信。
https://stackoverflow.com/questions/62320603
复制相似问题