diff options
| author | 2012-08-25 13:44:46 -0700 | |
|---|---|---|
| committer | 2012-08-25 13:44:51 -0700 | |
| commit | 04a286b95528e1fe7c0a18e8780a64bfadbd1eba (patch) | |
| tree | d6b9605f9ab9cb35cf593a2f00a8a040f472f5aa | |
| parent | f85ddd6571c9084b76d874f79245d087b152cb67 (diff) | |
| parent | 028872fe07f9b3468aa1506c658d6aae25f53015 (diff) | |
Merge "Fix GpsLocationProvider wake lock book keeping." into jb-mr1-dev
| -rwxr-xr-x | services/java/com/android/server/location/GpsLocationProvider.java | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/services/java/com/android/server/location/GpsLocationProvider.java b/services/java/com/android/server/location/GpsLocationProvider.java index 32b3597fa4aa..c2c0a71f218d 100755 --- a/services/java/com/android/server/location/GpsLocationProvider.java +++ b/services/java/com/android/server/location/GpsLocationProvider.java @@ -598,6 +598,8 @@ public class GpsLocationProvider implements LocationProviderInterface { } mInjectNtpTimePending = STATE_DOWNLOADING; + // hold wake lock while task runs + mWakeLock.acquire(); AsyncTask.THREAD_POOL_EXECUTOR.execute(new Runnable() { @Override public void run() { @@ -628,14 +630,16 @@ public class GpsLocationProvider implements LocationProviderInterface { delay = RETRY_INTERVAL; } - mHandler.sendMessage(Message.obtain(mHandler, INJECT_NTP_TIME_FINISHED)); + sendMessage(INJECT_NTP_TIME_FINISHED, 0, null); if (mPeriodicTimeInjection) { // send delayed message for next NTP injection // since this is delayed and not urgent we do not hold a wake lock here - mHandler.removeMessages(INJECT_NTP_TIME); - mHandler.sendMessageDelayed(Message.obtain(mHandler, INJECT_NTP_TIME), delay); + mHandler.sendEmptyMessageDelayed(INJECT_NTP_TIME, delay); } + + // release wake lock held by task + mWakeLock.release(); } }); } @@ -652,6 +656,8 @@ public class GpsLocationProvider implements LocationProviderInterface { } mDownloadXtraDataPending = STATE_DOWNLOADING; + // hold wake lock while task runs + mWakeLock.acquire(); AsyncTask.THREAD_POOL_EXECUTOR.execute(new Runnable() { @Override public void run() { @@ -664,17 +670,17 @@ public class GpsLocationProvider implements LocationProviderInterface { native_inject_xtra_data(data, data.length); } - mHandler.sendMessage(Message.obtain(mHandler, DOWNLOAD_XTRA_DATA_FINISHED)); + sendMessage(DOWNLOAD_XTRA_DATA_FINISHED, 0, null); if (data == null) { // try again later // since this is delayed and not urgent we do not hold a wake lock here - mHandler.removeMessages(DOWNLOAD_XTRA_DATA); - mHandler.sendMessageDelayed(Message.obtain(mHandler, DOWNLOAD_XTRA_DATA), - RETRY_INTERVAL); + mHandler.sendEmptyMessageDelayed(DOWNLOAD_XTRA_DATA, RETRY_INTERVAL); } - } + // release wake lock held by task + mWakeLock.release(); + } }); } @@ -1475,11 +1481,17 @@ public class GpsLocationProvider implements LocationProviderInterface { private void sendMessage(int message, int arg, Object obj) { // hold a wake lock until this message is delivered + // note that this assumes the message will not be removed from the queue before + // it is handled (otherwise the wake lock would be leaked). mWakeLock.acquire(); mHandler.obtainMessage(message, arg, 1, obj).sendToTarget(); } private final class ProviderHandler extends Handler { + public ProviderHandler() { + super(true /*async*/); + } + @Override public void handleMessage(Message msg) { int message = msg.what; |