2014-11-21 2 views
1

Я использую Paho Android Service API, а я подключаюсь к onResume и отсоединяюсь в . Во время выполнения я могу отправить subscribe с сообщения published с ПК через mosquitto Broker. когда я нажимаю на него BackButton приложение crahses и показывает ниже logcat ошибок.Приложение сбой при нажатии BackButton

пожалуйста, дайте мне знать, как решить эту проблему.

Примечание:

1_since я использую Paho Android Service API я импортировал необходимые библиотеки в проект. И
в application элемента файла манифеста моего проекта я добавил эту линию

2_i я не регистрируя любые приемники в моем frament, приемник в включены в библиотеку я импортируемого использовать Pāho 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

разрегистрировать службу, перед вашим backpressed класса, используемой незарегистрированный в OnPause() метод – prakash

ответ

1

LogCat довольно четкое представление о ситуации. Похоже, вы не отменяете регистратор.

Вы должны сделать это, вызвав unregisterReceiver() в одном из методов жизненного цикла (onPause(), onStop()), который имеет ваша активность.

unregisterReceiver(yourReceiver); 

Где yourReceiver, скорее всего, является экземпляром MqttAndroidClient (на выходе LogCat)

+0

я не регистрирую никаких приемников в моем frament, приемник, включенные в библиотеке я импортировал использовать Pāho API – user2121

+0

могли бы вы предоставить некоторые код, чтобы я мог взглянуть? – Mike

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

Я не регистрирую никаких приемников в своем frament, приемник включен в библиотеку, которую я импортировал для использования API Paho – user2121

+0

, ваш логарифм показывает, что служба приема сообщений реализована, а затем после вашего выхода из класса вы не отменили регистрацию этой службы, – prakash

+0

ok, ваш показ службы в файле манифеста и где с помощью регистра intenservice – prakash

0

Я бы не стал повторять то, что предложили другие члены и повторно но единственное, что я хотел бы сказать, это то, что при вызове client.disconnect будет unregisterservice. Вы звонили disconnect?

0

У MqttAndroidClient есть метод с именем unregisterResources, который будет отменить регистрацию получателя, если таковой имеется.

Использование что-то любит этот

MqttConnection соединение = MqttConnections.getInstance (это) .getConnection (clientHandle); connection.getClient(). UnregisterResources();