问题是通常“调用”的onReceive
方法被延迟,直到用户唤醒设备。BroadcastReceiver
AlarmManager
这从未发生在我身上,我所拥有的唯一信息来自用户发送的报告。在日志中,我看到在第一种情况下,onReceive
方法调用延迟了近 2 小时,而在第二种情况下,方法调用延迟了大约 20 分钟。在这两种情况下,警报(和onReceive
)都在用户唤醒电话后立即启动。
问题连续两天出现两次,用户表示以前从未发生过。手机设置的唯一显着变化是启用了空中模式。
我的代码:
闹钟设置如下:
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent);
Logger.log("posting alarm " + id + " for " + formatTime(timeInMillis);
广播接收器的 onReceiveMethod:
@Override
public void onReceive(Context context, Intent intent) {
Logger.initialize(context, "AlarmReceiver");
...
}
从用户收到的日志:
481. 20/05 13:00:04 v89: posting alarm 4 for 7:0 (in 17:59)
486. 21/05 08:58:00 v89: logger initialized again from AlarmReceiver
536. 21/05 09:04:54 v89: posting alarm 4 for 7:0 (in 21:55)
541. 22/05 07:22:24 v89: logger initialized again from AlarmReceiver
空中模式是否有可能以某种方式阻止手机的唤醒?我可以阻止它吗?或者也许它是完全不同的东西?欢迎任何帮助。
设备是三星 Galaxy SIII (GT-I9305) 安卓 4.1.2
编辑:以防万一延迟可能是由记录器引起的,这是它的代码。mHandler
是使用 of 创建的HandlerThread
,所以我相信它不能阻塞onReceive
,对吧?
public synchronized static void initialize(Context context, String src) {
if (mInstance == null) {//wasn't null
...
} else {
Logger.log("logger initialized again from " + src);
}
}
public synchronized static void log(final String text) {
Log.d(TAG, text);
if (mInstance != null && mInstance.mLoggingEnabled) {
mInstance.mHandler.post(new Runnable() {
@Override
public void run() {
//some database operations
}
});
}
}