我有一個鬧鈴應用程序。我通常知道接收器的生命週期以及如何使用WakeLock。BroadcastReceiver不會喚醒手機
今天,我被一個用戶聯繫過,他給我發了一個非常奇怪的日誌,並抱怨說他的鬧鐘還沒有開始,直到他自己解鎖了手機。在接收器完成工作並開始活動之前,我曾經遇到手機重新入睡的問題,但在接收器中創建WakeLock似乎解決了這個問題。至少直到今天 - 從日誌看來,onreceive方法似乎根本沒有被調用,直到用戶自己解鎖手機。
事實:
- 它是第一種情況我也聽說過
- 它已經發生了幾次給用戶,但不是每一次
- 日誌由添加文本到SQLite數據庫準備。它似乎沒有以任何顯着的方式延遲應用
- 來自onReceive的信息在預計的警報開始時間之後超過100秒被記錄。這是用戶解鎖了手機
- 剛過我用AlarmManager.RTC_WAKEUP標誌
- 用戶說,他沒有任何自定義ROM中的onReceive
- 報警的第一個方法調用開始。我等待的答案,如果他有什麼自定義/鎖屏專用
- 手機型號是索尼的XperiaüST25A,安卓4.0.4
任何想法可能是造成這個問題呢? BroadcastReceiver的「內部」WakeLock有可能無法工作嗎?
編輯:
我想在這裏強調的問題 - 廣播接收器應該保持清醒的手機它的整個的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) {
}
}
}
看看沒有人可以給你任何適當的幫助沒有一些代碼。 –
@StefandeBruijn我有一些代碼以及解釋方式,我相信它沒有連接到問題導致 – Koger
親愛的,看到我的答案在這篇文章http:// stackoverflow。com/questions/20113161/start-activity-screen-even-if-screen-is-locked-in-android/31772607#31772607 – Junaid