【问题标题】:Some Issues about Using BroadcastReceivers关于使用广播接收器的一些问题
【发布时间】:2012-08-28 19:07:02
【问题描述】:

我想在我的应用程序中使用BroadcastReceiver 作为AsyncTask 不同Activities 的结果指示符,因此也使用AsyncTasks。我认为我的方法有点错误,或者我错过了一些东西。

我在做什么:首先,在onCreate 期间,我使用registerReceiver 方法将我的接收器注册为BroadcastReceiver。我的接收器看起来像:

protected BroadcastReceiver myReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String msg_for_me = intent.getStringExtra("some_msg");
        Log.i("Tutorial", msg_for_me);
    }
}

在我的应用程序中,我有 A 和 B 活动。每个都有不同的接收器,它们从不同的任务中获取消息。顺便说一下,我必须澄清一点,A 活动开始 B 活动。

我在活动 A 中使用接收器,然后活动 A 使用 startActivity 启动 B。在活动 B 中,我正在执行 AsyncTask 并在 onPostExecute 上发送带有 B 活动上下文的广播。但不知何故,A 活动的接收者仍然收到消息。两个接收者的内容相同,但名称不同。

所以这是我的问题:

  • 我应该在onPause 方法上开始新活动时unregisterReceiver 吗?
  • BroadcastReceiver 我是这样使用的吗,只打一个电话?每当我发送任何消息时,我都应该一次又一次地注册吗?
  • 我很确定我没有为Manifest 定义任何接收者。我想这是我做错了。如果这很好,我如何在发送广播时使用 IntentFilter?

如果有不确定的问题,请告诉我。任何有关 BroadcastReceiver 的线索都会非常有用。

【问题讨论】:

    标签: android android-intent broadcastreceiver activity-lifecycle intentfilter


    【解决方案1】:
    1. 是的,您应该在活动暂停时取消注册广播接收器。它 是潜在的泄漏。
    2. 没有广播接收器不适用于一次呼叫。 每次为注册的广播完成时都会调用它们 意图。
    3. 您可以注册接收器以获得特定意图 OnResume 像这样,

    mContext.registerReceiver(iReceiver, new android.content.IntentFilter("android.intent.action.BATTERY_CHANGED"));

    iReceiver 在哪里,

     iReceiver = new IntentReceiver();
    
    private class IntentReceiver extends BroadcastReceiver {
        private final String LOG_TAG="IntentReceiver";
    
        @Override
        public void onReceive(Context arg0, Intent intent) {
    
        }
     }
    

    并在 OnPause 上取消注册

    mContext.unregisterReceiver(iReceiver);
    

    【讨论】:

    • 感谢您的回答,但 B 活动的接收器仍然无法正常工作。即使我使用 B 活动的上下文发送广播,A 活动的接收者也会收到消息。你有什么建议吗?顺便说一句,这是我的主要问题。一旦有人解决了这个问题,我会接受它。
    • 你能用活动 A 和 B 的代码编辑你的问题吗?我可以尝试在这方面提供更多帮助。
    • VendettaDroid,再次感谢您。我自己发现错了。无需再更新了。
    猜你喜欢
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多