From 46db504de583d7d644a28a4e7adae43eed5df1ba Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Mon, 22 Feb 2010 16:36:44 -0500 Subject: [PATCH] Don't start location providers until the system is ready. Change-Id: Id545e95705e59ffbaaab8a679a1b7df488813101 BUG: 2461320 Signed-off-by: Mike Lockwood --- .../java/com/android/server/LocationManagerService.java | 9 ++++++--- services/java/com/android/server/SystemServer.java | 7 +++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java index dd351be874ba8..c0dcdf9cd96f5 100644 --- a/services/java/com/android/server/LocationManagerService.java +++ b/services/java/com/android/server/LocationManagerService.java @@ -485,14 +485,17 @@ public class LocationManagerService extends ILocationManager.Stub implements Run super(); mContext = context; - Thread thread = new Thread(null, this, "LocationManagerService"); - thread.start(); - if (LOCAL_LOGV) { Log.v(TAG, "Constructed LocationManager Service"); } } + void systemReady() { + // we defer starting up the service until the system is ready + Thread thread = new Thread(null, this, "LocationManagerService"); + thread.start(); + } + private void initialize() { // Create a wake lock, needs to be done before calling loadProviders() below PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 38df02f91fc3a..1f46faf8383fa 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -209,6 +209,7 @@ class ServerThread extends Thread { AppWidgetService appWidget = null; NotificationManagerService notification = null; WallpaperManagerService wallpaper = null; + LocationManagerService location = null; if (factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL) { try { @@ -303,8 +304,8 @@ class ServerThread extends Thread { try { Log.i(TAG, "Location Manager"); - ServiceManager.addService(Context.LOCATION_SERVICE, - new LocationManagerService(context)); + location = new LocationManagerService(context); + ServiceManager.addService(Context.LOCATION_SERVICE, location); } catch (Throwable e) { Log.e(TAG, "Failure starting Location Manager", e); } @@ -444,6 +445,7 @@ class ServerThread extends Thread { final WallpaperManagerService wallpaperF = wallpaper; final InputMethodManagerService immF = imm; final RecognitionManagerService recognitionF = recognition; + final LocationManagerService locationF = location; // We now tell the activity manager it is okay to run third party // code. It will call back into us once it has gotten to the state @@ -467,6 +469,7 @@ class ServerThread extends Thread { if (appWidgetF != null) appWidgetF.systemReady(safeMode); if (wallpaperF != null) wallpaperF.systemReady(); if (immF != null) immF.systemReady(); + if (locationF != null) locationF.systemReady(); } });