【问题标题】:Android Broadcast Receiver and separating dataAndroid广播接收器和分离数据
【发布时间】:2017-10-16 16:28:03
【问题描述】:

我想知道现在我在我的应用程序中使用带有意图服务的广播接收器。它现在运行良好。 1)我不想从广播接收器携带数据。我想单独携带数据。 对我有什么建议可以改进 android 中的广播接收器。

【问题讨论】:

  • 能否请您改写问题,很难理解
  • 请发布您的代码
  • @TimCastelijns 在我的代码中,1) MainActivity 调用 IntentService 从数据库中获取数据并将这些数据广播到活动。然后 MainActivity 中的广播接收器接收到这个数据并显示这个数据。
  • @TimCastelijns 实际上我的应用程序现在运行良好。我想优化我的代码,我不想将数据广播。
  • 尝试使用接口,直接从IntentService获取数据。

标签: android performance optimization broadcastreceiver android-service


【解决方案1】:

您说您不想使用BroadcastReceiver 来获取回调,但您没有说明原因。以下是一些可能的替代方案:

您可以使用LocalBroadcastManager(如果您还没有)。这可以确保您的数据不会从您的应用程序中广播出去(安全和开销问题)。这也比使用普通的sendBroadcast() 调用更轻(更好的性能)。

您可以从IntentService 切换到绑定Service。您可以使用 AIDL 从您的Activity 定义一个同步调用到您的Service。然后,您的 Activity 将绑定到 Service 并调用 Service 上的方法,该方法将返回数据作为方法调用的结果。在这种情况下不需要BroadcastReceiver

您可以作弊并使用包含对您的Activity 的引用的public static 变量(在您的ActivityonCreate() 中设置对this 的引用)。当Service 想要将数据发送到Activity 时,它可以使用对您的Activity 的引用并调用其上的任何方法将数据传回。在这种情况下不需要BroadcastReceiver。这是一个黑客。如果您使用它,请确保在使用之前检查public static 变量以确保它不是null。此外,这将导致内存泄漏,因为当您的 Activity 完成时,垃圾收集器将无法回收您的 Activity 的实例,但这可能没什么大不了的,因为 Android 最终会杀死托管您的应用程序的操作系统进程反正。我不会担心的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多