我有一个应用程序,它使用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