我想从我的应用程序的主要活动开始广播接收器类。主要活动有所有的 GUI 东西,这个活动启动一个执行所有工作的服务。为了在重新启动后启动此服务,我编写了一个广播接收器类。现在我很困惑在哪里调用广播接收器类。
- 如何从我的主要活动中调用它(我不想让主要活动成为广播接收器)?
- 如果我从主活动调用广播接收器,它会在每次活动开始时创建一个广播类的新实例。如果是这样,是否会导致内存泄漏或者之前的广播接收器实例会被自动销毁?
问候
我想从我的应用程序的主要活动开始广播接收器类。主要活动有所有的 GUI 东西,这个活动启动一个执行所有工作的服务。为了在重新启动后启动此服务,我编写了一个广播接收器类。现在我很困惑在哪里调用广播接收器类。
问候
作为一种解决方案,您可以将自己的意图过滤器应用于BroadcastReceiver
,注册它,然后sendBroadcast()
在注册接收器后立即调用您的活动。这假设您在onReceive()
方法内部比较接收器的意图。
内存呢,这取决于您如何管理活动的生命周期,因为在剩余对活动的引用的情况下,它不会从内存中删除,因此会导致创建接收器的多个实例。
您还可以添加android.intent.action.BOOT_COMPLETED
意图过滤器以在设备启动后启动您的接收器
您可以从任何活动(包括您的主要活动)或班级广播消息。我正在使用辅助类来执行此操作:
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);
}
}
不要忘记在清单文件中注册您的接收器。
使用这种方法不会创建任何类的新实例,除了意图本身,它将被垃圾收集。