问题是 BroadcastReceiver
的方法通常会被AlarmManager
“呼叫”,直到用户唤醒设备。AlarmManager未在空气模式下唤醒电话(onreceive延迟)
这从来没有发生过我,只有我得到的信息是来自用户发送的报告。在日志中,我看到在第一种情况下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)采用Android 4.1.2
编辑: 只是在拖延可能被记录器以某种方式造成的情况下,这里是它的代码。 mHandler
是使用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
}
});
}
}
嗨科格,做你曾经找到过这个问题的解决方案吗? – ChriPf
@ChriPf我无法重现它。此外,我失去了与用户的联系,并且错误再也没有报告过 – Koger