【问题标题】:Calling BroadCast receiver from main activity android从主要活动android调用广播接收器
【发布时间】:2013-06-14 20:47:56
【问题描述】:

我想从我的应用程序的主要活动中启动广播接收器类。主要活动有所有的 GUI 东西,这个活动启动一个执行所有工作的服务。为了在重新启动后启动此服务,我编写了一个广播接收器类。现在我很困惑在哪里调用广播接收器类。

  • 如何从我的主要活动中调用它(我不想让主要活动成为广播接收器)?
  • 如果我从主活动调用广播接收器,它是否会在每次活动开始时创建一个广播类的新实例。如果是这样,会不会导致内存泄漏或者之前的广播接收器实例会被自动销毁?

问候

【问题讨论】:

  • 是否应该在用户启动应用程序时也调用它?

标签: java android broadcastreceiver boot


【解决方案1】:

作为一种解决方案,您可以将自己的意图过滤器应用于 BroadcastReceiver ,注册它,然后在注册接收器后在您的活动中调用 sendBroadcast()。这假设您在onReceive() 方法中比较接收者的意图。

内存呢,这取决于您如何管理 Activity 的生命周期,因为在剩余对您的 Activity 的引用的情况下,它不会从内存中删除,因此会导致创建您的接收器的多个实例。

您还可以添加android.intent.action.BOOT_COMPLETED 意图过滤器以在设备启动后启动您的接收器

【讨论】:

  • 如果receiver只启动Service,需要调用Receiver吗?
  • 如何调用onDestory()的活动
【解决方案2】:

您可以从任何活动(包括您的主要活动)或班级广播消息。我正在使用辅助类来执行此操作:

public class BroadcastHelper {

public static void sendBroadcast(Context context, String message, Serializable value) {

    Intent broadcastIntent = new Intent();
    broadcastIntent.setAction(message);
    broadcastIntent.putExtra(Constants.BROADCAST_MESSAGE, value);
    context.sendBroadcast(broadcastIntent);

}

}

不要忘记在清单文件中注册您的接收器。

使用这种方法不会创建任何类的新实例,除了意图本身,它们将被垃圾收集。

【讨论】:

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