Android:泄漏的intentreceiver,试图让接收器在后台保持活着

时间:2013-11-19 11:30:38

标签: android android-intent broadcastreceiver

我有一个在后台运行的服务,一个PacketListener。监听器发送其他类中的意图接收者接收的广播。

sendBroadcast(new Intent("UPDATE_LIST"));

我的Main.class中有一个意图接收器,我想保持活着,即使用户按下主页按钮并且应用程序在后台运行。所以在我的主类中的onPause()中,我并不是故意重新注册接收器。但是我在LogCat中遇到一个异常,说“Main已经泄露了IntentReceiver,unregisterReceiver()?”

@Override
protected void onResume() 
{
    if (dataUpdateReceiver == null) 
    {
        dataUpdateReceiver = new DataUpdateReceiver();
        IntentFilter intentFilter = new IntentFilter("UPDATE_LIST");        
        registerReceiver(dataUpdateReceiver, intentFilter);
    }


    if (imReceiver == null)
    {
        imReceiver = new IMReceiver();
        IntentFilter intentFilter = new IntentFilter("IM");
        registerReceiver(imReceiver, intentFilter);
    }

    super.onResume();       
}

有人能指出我如何在没有泄漏的情况下让意图接收器保持活跃的正确方向吗?

感谢。

2 个答案:

答案 0 :(得分:0)

为此,您必须在Receiver文件中注册Manifest。如果您的应用未运行,则会创建清单,将创建一个新流程来处理广播。如果您在代码中注册它,它与您在其中注册的活动/服务的生命周期相关联。

在清单中注册接收器的示例代码。

<receiver android:name=".ReceiverDemo">
  <intent-filter>
    <action android:name="marakana.intent.action.ReceiverDemo" />
  </intent-filter>
</receiver>

答案 1 :(得分:0)

您可以这样注册接收器类

<receiver android:name="receiver class name with package" >
        <intent-filter>
            <action android:name="your intent action" />
        </intent-filter>
    </receiver>