問題是 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