У меня есть сигнальное применение. Я обычно знаю жизненный цикл приемника и как использовать WakeLock.
Сегодня, однако, со мной связался пользователь, которые послали мне действительно странную регистрацию и жаловались, что его тревога не началась, пока он не имел, открыл телефон один. Я раньше имел проблемы с телефонами, возвращающимися, чтобы спать после того, как приемник закончил его работу и прежде чем деятельность была начата, но создание WakeLock в приемнике, казалось, решило проблему. По крайней мере, до сих пор - от регистрации кажется, что onReceive метод не назвали вообще, пока у пользователя нет разблокированного телефона один.
Факты:
- это - первое дело, которое я слушал
- это произошло несколько раз с пользователем, но не каждый раз
- регистрация подготовлен, добавив текст к базе данных SQLite. Это, кажется, не задерживает применение никаким значительным способом
- информация от onReceive был зарегистрирован спустя более чем 100 секунд после ожидаемого сигнального времени начала. Это - первый вызов метода в onReceive
- тревога была начата сразу после пользователя, открыл телефон
- я использую AlarmManager. Флаг RTC_WAKEUP
пользователь <лития> говорит, что у него нет обычая rom. Я жду ответа, если у него есть какой-либо таможенный/особенный Lockscreen
<литием> модель телефона является Sony Xperia U ST25A, Android 4.0.4
Какие-либо идеи, что могло вызывать эту проблему? Действительно ли возможно, что BroadcastReceiver "в" WakeLock не работает так или иначе?
Править:
Я хотел бы подчеркнуть проблему здесь - BroadcastReceiver должен не дать спать телефону во время своего целого onReceive метода. Однако, в моем случае, это - любой это
- телефон падает на сон прежде 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) {
}
}
}