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(); } });