2014-11-21 109 views
1

我使用Paho Android Service API,我在onResume中连接,并在中断开连接。在运行时,我可以从设备上获取subscribe,并通过mosquitto Broker查看来自PC的published消息。当我按他BackButton该应用程序crahses并显示下面logcat错误。当按下BackButton时,应用程序崩溃

请让我知道如何解决这个问题。

到注意

1_since我使用Paho Android Service API我进口所需的库到项目中。而
我的项目的清单文件的application元素内我已经加入这一行

2_i不是在我的frament注册任何接收器,在包括在库接收我 进口使用泛美卫生组织API

<!-- Mqtt Service --> 
    <service android:name="org.eclipse.paho.android.service.MqttService" > 
    </service> 

logcat的

 Activity com.example.mqtt_test_00.MessaginActivity 
    has leaked IntentReceiver [email protected] that was 
    originally registered here. Are you missing a call to unregisterReceiver()? 
android.app.IntentReceiverLeaked: Activity 
    com.example.mqtt_test_00.MessaginActivity has leaked IntentReceiver 
    [email protected] that was originally registered here. 
    Are you missing a call to unregisterReceiver()? 
    at android.app.LoadedApk$ReceiverDispatcher. 
    <init>(LoadedApk.java:814) 
    at 
    android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:610) 
    at 
    android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1762) 
    at 
    android.app.ContextImpl.registerReceiver(ContextImpl.java:1742) 
    at 
    android.app.ContextImpl.registerReceiver(ContextImpl.java:1736) 
    at 
    android.content.ContextWrapper.registerReceiver(ContextWrapper.java:478) 
    at org 
    .eclipse.paho.android.service.MqttAndroidClient.registerReceiver(MqttAndroidClient.java:410) 

    at 
    org.eclipse.paho.android.service.MqttAndroidClient.connect(MqttAndroidClient.java:388) 
    at 
    com.example.mqtt_test_00.Sub_Frag$5.onClick(Sub_Frag.java:98) 
android.app.ServiceConnectionLeaked: Activity 
    com.example.mqtt_test_00.MessaginActivity has leaked ServiceConnection 
    org.ecl[email protected]430756f0 that was 
    originally bound here 
    at android.app.LoadedApk$ServiceDispatcher.<init> 
    (LoadedApk.java:988) 
    at 
    org.eclipse.paho.android.service.MqttAndroidClient.connect(MqttAndroidClient.java:385) 
    at 
    com.example.mqtt_test_00.Sub_Frag$5.onClick(Sub_Frag.java:98) 
+0

取消注册该服务,在压倒之前,在onpause()方法中使用unregister – prakash 2014-11-21 12:43:05

回答

1

的logcat的是了解情况非常清楚。好像你没有注销一个接收器。

您应该通过在您的Activity的生命周期方法(onPause(),onStop())之一中调用unregisterReceiver()来做到这一点。

unregisterReceiver(yourReceiver); 

哪里yourReceiver是最有可能MqttAndroidClient的一个实例(每logcat的输出)

+0

我没有注册任何接收器在我的frament中,接收器包含在我导入的库中使用Paho API – user2121 2014-11-21 12:45:40

+0

您能否提供一些代码,所以我可以看看? – Mike 2014-11-21 13:00:00

0

您的问题是:

11-21 13:26:51.703: E/ActivityThread(28310): android.app.IntentReceiverLeaked: Activity 
com.example.mqtt_test_00.MessaginActivity has leaked IntentReceiver 
[email protected] that was originally  registered here. 
Are you missing a call to unregisterReceiver()? 

你不是在同一个类中取消注册服务,让您有这个问题,尝试这样,

@Override 
public void onPause() { 
    super.onPause(); 
    try 
    { 
     unregisterReceiver(this.intentReceiver); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 
+0

我没有在我的档案中注册任何接收器,接收器包含在我导入的库中,使用Paho API – user2121 2014-11-21 12:46:17

+0

您的logcat显示消息接收器服务已实施,然后在您退出课程之后,您不注销该服务, – prakash 2014-11-21 12:54:20

+0

好吧,您在清单文件中显示的服务以及使用注册intentservice – prakash 2014-11-21 12:56:48

0

我不会重复其他成员建议和重新但我唯一想说的是,拨打client.disconnectunregisterservice。你有没有拨打disconnect

0

MqttAndroidClient有一个名为unregisterResources的方法,它将取消注册接收方(如果有的话)。

用法是喜欢的东西这

MqttConnection连接= MqttConnections.getInstance(本).getConnection(clientHandle); connection.getClient()。unregisterResources();