天天看點

MQTT Paho之Android service源碼分析

官網:

https://www.eclipse.org/paho/clients/android/ http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.java.git/ https://www.eclipse.org/paho/clients/android/sample/

libs下載下傳連結:

mqtt java 用戶端開發涉及到兩個lib,分别是

1、org.eclipse.paho.client.mqttv3-1.0.2.jar

https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/org.eclipse.paho.client.mqttv3/

2、org.eclipse.paho.android.service-1.0.2.jar

https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/org.eclipse.paho.android.service/

普通的java web工程和Android開發不同。java web隻需要使用第1個jar包,而Android開發則兩個都要用到,因為Android需要啟動背景Service元件來完成消息的釋出和訂閱。本文章重點講訴的是android service,即org.eclipse.paho.android.service-1.0.2.jar。

從官網

可以擷取到源碼包org.eclipse.paho.mqtt.java-1.0.2.zip。

解壓縮,裡面org.eclipse.paho.mqtt.java-1.0.2\org.eclipse.paho.android.service\org.eclipse.paho.android.service就是android service的源碼。org.eclipse.paho.android.service-1.0.2.jar就是通過此源碼導出生成的。

一、MqttAndroidClient.java

1、Service元件

工程AndroidManifest.xml檔案有Service的定義。

第390行,函數connect(),有startService和bindService的執行,啟動和綁定Service與外部的Activity通信。

2、BroadcastReceiver元件

第70行,public class MqttAndroidClient extends BroadcastReceiver和第1251行的函數OnReceive(Context context, Intent intent)是配套的,用于監聽廣播消息。

第1435行,函數messageArrivedAction()裡面有callback.messageArrived(),可以把接收來自Service的資料回調發送到使用者界面的Activity裡。

第442行的registerReceiver()和第1599行的unregisterReceiver()分别是注冊和登出Broadcast。

IntentFilter filter = new IntentFilter();

filter.addAction(MqttServiceConstants.CALLBACK_TO_ACTIVITY);

二、MqttConnection.java

第755行,重寫了MqttCallback的函數connectionLost();

第803行,重寫了MqttCallback的函數deliveryComplete();

第755行,重寫了MqttCallback的函數messageArrived();

該源檔案出現了許多回調函數service.callbackToActivity();

三、MqttService.java

第267行,函數callbackToActivity();裡面有發送廣播sendBroadcast()的實作。

Intent callbackIntent = new Intent(MqttServiceConstants.CALLBACK_TO_ACTIVITY);

繼續閱讀