Java 从主活动android调用广播接收器

Java 从主活动android调用广播接收器,java,android,broadcastreceiver,boot,Java,Android,Broadcastreceiver,Boot,我想从我的应用程序的主要活动开始广播接收器类。主活动包含所有GUI内容,此活动启动一个执行所有工作的服务。为了在重新启动后启动此服务,我编写了一个广播接收器类。现在我不知道在哪里调用广播接收器类 我如何从我的主要活动中调用它(我不想让主要活动成为广播接收器) 如果我从主活动调用broadcast receiver,它将在每次活动开始时创建广播类的新实例。如果是,它会导致内存泄漏还是会自动销毁以前的广播接收器实例 将视为一种解决方案,您可以将自己的意图过滤器应用于广播接收器,注册它,然后在注册

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

  • 我如何从我的主要活动中调用它(我不想让主要活动成为广播接收器)
  • 如果我从主活动调用broadcast receiver,它将在每次活动开始时创建广播类的新实例。如果是,它会导致内存泄漏还是会自动销毁以前的广播接收器实例

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

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


您还可以添加
android.intent.action.BOOT\u COMPLETED
intent过滤器,在设备启动后启动接收器

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

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

}
}

别忘了在清单文件中注册你的接收人


使用此方法不会创建任何类的新实例,但intent本身除外,它将被垃圾收集。

用户启动应用程序时是否也应调用它?如果Receiver仅启动服务,则调用Receiver有什么必要?如何调用activity的
onDestory()