Android 模擬器與 PC 進行 Socket 通訊時,若刻意斷開連線,未捕獲異常會導致 App 崩潰退出。需在連線邏輯外層捕獲所有可拋出的錯誤並友善提示。
try {
socket = new Socket(serverIp, port);
// 通訊邏輯
} catch (Throwable t) { // 捕獲 Error + Exception
runOnUiThread(() ->
Toast.makeText(MainActivity.this, "連線失敗:" + t.getMessage(), Toast.LENGTH_SHORT).show()
);
} finally {
closeQuietly(socket);
}
Socket 連線失敗可能拋出 java.net.ConnectException(Exception 子類),但某些底層錯誤(如 OutOfMemoryError、StackOverflowError)屬於 Error,不繼承 Exception。捕獲 Throwable 能覆蓋所有情況,防止漏網之魚導致崩潰。
Thread、AsyncTask、RxJava、Coroutine)。socket.connect(new InetSocketAddress(ip, port), 5000)。try-with-resources 或 finally 確保關閉。