首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

Java ME 應用設計指南:多網絡連接並發控制與 JAD 適配策略

     編輯:J2ME

部分手機限制同時打開的網絡連接數(如僅 1~3 個),強行多連會導致崩潰或異常。標準做法:在 JAD 聲明 Device-Max-Connection,啟動時讀取並全局計數控制並發數。

JAD 聲明範例


MIDlet-1: Foo, , Foo
MIDlet-Jar-Size: 7063
MIDlet-Jar-URL: foo.jar
MIDlet-Name: Foo
MIDlet-Vendor: Yoyodyne Inc.
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.1
MicroEdition-Profile: MIDP-2.0
Device-Max-Connection: 3

啟動期讀取並初始化計數器


/* 初始化代碼 */
String maxConnStr = getAppProperty("Device-Max-Connection");
int deviceMaxConnection = Integer.parseInt(maxConnStr);
int openConnection = 0; // 全局變量,建議封裝在連接管理器單例中

建立連接時檢查並發限制


if (openConnection < deviceMaxConnection) {
    HttpConnection conn = (HttpConnection) Connector.open(uri);
    openConnection++;
    // 使用連接...
} else {
    // 失敗處理:排隊、重試、降級
}

釋放連接時遞減計數器


connection.close();
openConnection--;

如何測得設備最大連接數(無規格文檔時)


int connection = 0;
try {
    while (true) {
        Connector.open("https://tools.ietf.org/html/rfc262" + connection);
        connection++;
    }
} catch (Exception e) {
    // 此處 connection 即為最大並發數
    // 寫入 JAD 的 Device-Max-Connection
}

測試 MIDlet 僅需跑一次,將結果寫入 JAD 供正式版讀取。

進階:連接池封裝建議

  • 封裝 ConnectionManager 單例,內部維護 Vector 可用連接池。
  • acquire() 取連接(阻塞或失敗)、release() 歸還。
  • 支援優先級:關鍵請求(登入、支付)高優先級,非關鍵(統計、廣告)低優先級。
  • 超時回收:借出超時未歸還強制關閉,防洩漏。

注意事項

  • JAD 屬性區分大小寫,getAppProperty 取不到回傳 null。
  • 不同網絡介面(GPRS、Wi-Fi、藍牙)可能有獨立限制,測試時模擬實際使用場景。
  • 簽名應用(Trusted/Manufacturer 域)可能享有更高限制,需分開測試。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved