我有一個應用程序,它使用AlarmManager
每X時間安排一個重複報警。當我的接收器收到Intent
時,它必須發出http請求。網絡呼叫報警超時
鬧鐘本身工作正常,並在應該時觸發。但是,網絡電話在手機未使用時開始超時。更具體地說:
當我安排每分鐘開火(壞習慣,我知道,但只是爲了說明),請求成功的第一個5-8分鐘。之後,我得到java.net.SocketTimeoutException: connect timed out
。有時它確實成功,但大多數情況是這樣。
我試圖設置連接/讀/寫超時到一分鐘,但後來我得到這個異常,而不是上面的那個:java.net.ConnectException: Failed to connect to myapp.example.com/123.45.67.89:80
。
我的代碼:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Consider mApi and myBody to be initialised and valid
mApi.myPostRequest(myBody).enqueue(new Callback<Void> {
@Override
public void onResponse(Call<Void> call, Response<Void> response) {
//Does not get here
}
@Override
public void onFailure(Call<Void> call, Throwable t) {
t.printStackTrace();
}
}
}
}
事情我已經嘗試:
- 如前所述,增加超時
- 獲取在
onReceive
WakeLock
和釋放它當調用完成(增加了 權限)
其他信息:
- 報警使用
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), interval, pendingIntent);
從我Activity
設置。 - 我使用的是改造(2.1.0)網絡通信,但你很可能已經猜到了,從我的代碼;)
如何讓網絡通話時,手機工作的任何想法睡眠?
聽起來[打盹模式干擾(HTTPS: //developer.android.com/training/monitoring-device-state/doze-standby.html)。對於Android 5.0及更高版本的設備,請考慮切換到「JobScheduler」並將作業配置爲僅在有Internet連接時才能獲取控件。 – CommonsWare