android - AlarmManager not waking phone up in Air Mode (onReceive delayed) -


problem onreceive method of broadcastreceiver "called" alarmmanager delayed until device awoken user.

this has never happened me, information have report sent user. in log saw in first case onreceive method call delayed 2 hours , in second 1 20 minutes. in both situations alarm (and onreceive) has started after phone awoken user.

problem has occured twice in 2 consecutive days , user states has never happened before. distinctive change in phone's settings air mode enabled.

my code:

alarm set like:

pendingintent pendingintent = pendingintent.getbroadcast(context, 0, alarmintent, pendingintent.flag_update_current); am.set(alarmmanager.rtc_wakeup, timeinmillis, pendingintent); logger.log("posting alarm " + id + " " + formattime(timeinmillis); 

broadcast receiver's onreceivemethod:

@override public void onreceive(context context, intent intent) {     logger.initialize(context, "alarmreceiver");     ... } 

logs received user:

481. 20/05 13:00:04 v89: posting alarm 4 7:0 (in 17:59) 486. 21/05 08:58:00 v89: logger initialized again alarmreceiver  536. 21/05 09:04:54 v89: posting alarm 4 7:0 (in 21:55) 541. 22/05 07:22:24 v89: logger initialized again alarmreceiver 

is possible air mode block phone's awakening somehow? can prevent it? or maybe different? welcomed.

device samsung galaxy siii (gt-i9305) android 4.1.2

edit: in case delay somehow caused logger, here's code. mhandler created use of handlerthread, believe can't block onreceive, right?

public synchronized static void initialize(context context, string src) {     if (minstance == null) {//wasn't null        ...     } else {         logger.log("logger initialized again " + 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             }         });     } } 

if want schedule tasks specified interval don't use flags alarmmanager.rtc , alarmmanager.rtc_wakeup method alarm.setrepeating(...). because in case alarm bounded device's real time clock. changing system time may cause alarm misbehave. must use flags alarmmanager.elapsed_realtime or alarmmanager.elapsed_realtime_wakeup. in case systemclock.elapsedrealtime() serve basis scheduling alarm.

the code like:

alarmmanager.setrepeating(alarmmanager.elapsed_realtime_wakeup, systemclock.elapsedrealtime() + checkintervalmillis, checkintervalmillis, pendingintent); 

if want long running task executed when device in sleep mode recommend use wakefulintentservice library commonsware: https://github.com/commonsguy/cwac-wakeful


Comments

Popular posts from this blog

java - Run spring boot application error: Cannot instantiate interface org.springframework.context.ApplicationListener -

python - pip wont install .WHL files -

Excel VBA "Microsoft Windows Common Controls 6.0 (SP6)" Location Changes -