@@ -598,6 +598,8 @@ private void handleInjectNtpTime() {
598598 }
599599 mInjectNtpTimePending = STATE_DOWNLOADING ;
600600
601+ // hold wake lock while task runs
602+ mWakeLock .acquire ();
601603 AsyncTask .THREAD_POOL_EXECUTOR .execute (new Runnable () {
602604 @ Override
603605 public void run () {
@@ -628,14 +630,16 @@ public void run() {
628630 delay = RETRY_INTERVAL ;
629631 }
630632
631- mHandler . sendMessage (Message . obtain ( mHandler , INJECT_NTP_TIME_FINISHED ) );
633+ sendMessage (INJECT_NTP_TIME_FINISHED , 0 , null );
632634
633635 if (mPeriodicTimeInjection ) {
634636 // send delayed message for next NTP injection
635637 // since this is delayed and not urgent we do not hold a wake lock here
636- mHandler .removeMessages (INJECT_NTP_TIME );
637- mHandler .sendMessageDelayed (Message .obtain (mHandler , INJECT_NTP_TIME ), delay );
638+ mHandler .sendEmptyMessageDelayed (INJECT_NTP_TIME , delay );
638639 }
640+
641+ // release wake lock held by task
642+ mWakeLock .release ();
639643 }
640644 });
641645 }
@@ -652,6 +656,8 @@ private void handleDownloadXtraData() {
652656 }
653657 mDownloadXtraDataPending = STATE_DOWNLOADING ;
654658
659+ // hold wake lock while task runs
660+ mWakeLock .acquire ();
655661 AsyncTask .THREAD_POOL_EXECUTOR .execute (new Runnable () {
656662 @ Override
657663 public void run () {
@@ -664,17 +670,17 @@ public void run() {
664670 native_inject_xtra_data (data , data .length );
665671 }
666672
667- mHandler . sendMessage (Message . obtain ( mHandler , DOWNLOAD_XTRA_DATA_FINISHED ) );
673+ sendMessage (DOWNLOAD_XTRA_DATA_FINISHED , 0 , null );
668674
669675 if (data == null ) {
670676 // try again later
671677 // since this is delayed and not urgent we do not hold a wake lock here
672- mHandler .removeMessages (DOWNLOAD_XTRA_DATA );
673- mHandler .sendMessageDelayed (Message .obtain (mHandler , DOWNLOAD_XTRA_DATA ),
674- RETRY_INTERVAL );
678+ mHandler .sendEmptyMessageDelayed (DOWNLOAD_XTRA_DATA , RETRY_INTERVAL );
675679 }
676- }
677680
681+ // release wake lock held by task
682+ mWakeLock .release ();
683+ }
678684 });
679685 }
680686
@@ -1475,11 +1481,17 @@ private void requestRefLocation(int flags) {
14751481
14761482 private void sendMessage (int message , int arg , Object obj ) {
14771483 // hold a wake lock until this message is delivered
1484+ // note that this assumes the message will not be removed from the queue before
1485+ // it is handled (otherwise the wake lock would be leaked).
14781486 mWakeLock .acquire ();
14791487 mHandler .obtainMessage (message , arg , 1 , obj ).sendToTarget ();
14801488 }
14811489
14821490 private final class ProviderHandler extends Handler {
1491+ public ProviderHandler () {
1492+ super (true /*async*/ );
1493+ }
1494+
14831495 @ Override
14841496 public void handleMessage (Message msg ) {
14851497 int message = msg .what ;
0 commit comments