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

Android Socket 連線失敗不崩潰:捕獲 Throwable 並彈出 Toast 提示

     編輯:程式設計綜合問答

Android 模擬器與 PC 進行 Socket 通訊時,若刻意斷開連線,未捕獲異常會導致 App 崩潰退出。需在連線邏輯外層捕獲所有可拋出的錯誤並友善提示。

關鍵修正:捕獲 Throwable 而非 Exception

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);
}

為何用 Throwable?

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 確保關閉。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved