Java ME 裝置對同時開啟的網路連線數有硬性限制,差異極大。強行開啟超過裝置上限的連線會導致應用程式崩潰。正確做法是在 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
// 初始化讀取 JAD 屬性
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 {
// 超過上限,拋出例外或排隊
}
// 關閉連線時遞減計數
conn.close();
openConnection--;
int count = 0;
try {
while (true) {
Connector.open("https://tools.ietf.org/html/rfc262" + count);
count++;
}
} catch (Exception e) {
// 此處 count 即為最大連線數
System.out.println("Max connections: " + count);
}
openConnection 設計為全域單例計數器,確保多執行緒安全(可用 synchronized)。妥善管理連線資源,能顯著提升 Java ME 應用在低階裝置上的穩定性與使用者體驗。