清單文件設置 android:minSdkVersion="14" android:targetSdkVersion="19" 時,使用 HttpClient 訪問網絡報錯;改為 minSdkVersion="9" 則正常。
Android 3.0 (API 11) 引入 StrictMode,預設禁止在主線程執行網絡 I/O。targetSdkVersion >= 11 時嚴格執行,拋出 NetworkOnMainThreadException。
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
// 這裡執行 HttpClient 請求
return executeHttpRequest();
}
@Override
protected void onPostExecute(String result) {
// 更新 UI
}
}.execute();
new Thread(() -> {
String result = executeHttpRequest();
runOnUiThread(() -> updateUI(result));
}).start();
targetSdkVersion 未指定時默認等於 minSdkVersion。targetSdkVersion=9 時系統以「舊應用兼容模式」運行,不強制執行 StrictMode 網絡檢查。但這只是掩蓋問題,不代表代碼正確。
minSdkVersion >= 11 時主線程網絡請求會崩潰,必須移至子線程。建議直接棄用 HttpClient(API 23 已移除),遷移至 OkHttp/Retrofit,從架構層面解決線程與維護難題。