我有一个警报应用程序。我通常知道接收器的生命周期以及如何使用WakeLock。
今天然而,一位用户联系了我,他给我发了一个非常奇怪的日志,抱怨他的警报没有开始,直到他自己解锁了电话。在接收器完成其工作之后和活动开始之前,我曾经遇到手机重新入睡的问题,但在接收器中创建WakeLock似乎解决了这个问题。至少直到今天 - 从日志开始,似乎在用户自己解锁手机之前根本没有调用onReceive方法。
事实:
任何可能导致此问题的想法?是否有可能BroadcastReceiver的“内部”WakeLock无法以某种方式工作?
编辑:
我想强调这里的问题 - BroadcastReceiver应该在整个onReceive方法中保持手机清醒。但在我的情况下,它要么是
另外,我想指出用户已经明确说明的事实 - 当他自己解锁手机时,警报已经开始了。几次。
一些代码:
@Override
public void onReceive(Context context, Intent intent) {
Logger.initialize(context, "AlarmReceiver");
...
}
记录器方法:
public synchronized static void initialize(Context context, String text) {
try {
if (mInstance == null) { // this is the block that is runned
BugSenseHandler.initAndStartSession(context, BUGSENSE_ID);
mInstance = new Logger(context);
log("== Logger initialized == from "
+ (text != null ? text : "")); // it stores times as well. Said
// that alarm was started over 100
// seconds after it should
} else {
log("logger initialized again from "
+ (text != null ? text : ""));
}
} catch (Exception e) {
try {
BugSenseHandler.sendException(e);
mInstance = null;
} catch (Exception e2) {
}
}
}