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