Service 中的線程發起 HTTP 請求,首次啟動正常,但 Service 重啟或長時間運行後報 ECONNREFUSED,點擊主頁面後恢復。
HttpURLConnection 或未正確關閉流。ConnectException 後延遲重連。ConnectivityManager 廣播,網絡恢復時重新建立連接。HttpURLConnection,自動處理連接池、重試、超時。startForeground() 降低被殺概率,並在 onStartCommand 返回 START_STICKY。OkHttpClient client = new OkHttpClient.Builder()
.retryOnConnectionFailure(true)
.connectTimeout(10, TimeUnit.SECONDS)
.build();
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(new Callback() {
@Override public void onFailure(Call call, IOException e) {
// 記錄日誌,安排重試
}
@Override public void onResponse(Call call, Response response) {
// 處理響應
}
});
避免在 Service 線程中直接使用底層 HTTP API,採用成熟網絡庫並配合生命周期管理,可顯著提升穩定性。