从主要活动android调用BroadCast接收器

时间:2013-06-14 12:27:12

标签: java android broadcastreceiver boot

我想从我的应用程序的主要活动开始广播接收器类。主要活动包含所有GUI内容,此活动启动一项执行所有工作的服务。为了在重启后启动此服务,我编写了一个广播接收器类。现在我很困惑在哪里调用广播接收器类。

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

此致

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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);

}

}

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

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