diff --git a/services/core/java/com/android/server/NetworkScoreService.java b/services/core/java/com/android/server/NetworkScoreService.java index 33f77697f88cd..80d7ac9311119 100644 --- a/services/core/java/com/android/server/NetworkScoreService.java +++ b/services/core/java/com/android/server/NetworkScoreService.java @@ -128,6 +128,30 @@ public class NetworkScoreService extends INetworkScoreService.Stub { } }; + public static final class Lifecycle extends SystemService { + private final NetworkScoreService mService; + + public Lifecycle(Context context) { + super(context); + mService = new NetworkScoreService(context); + } + + @Override + public void onStart() { + Log.i(TAG, "Registering " + Context.NETWORK_SCORE_SERVICE); + publishBinderService(Context.NETWORK_SCORE_SERVICE, mService); + } + + @Override + public void onBootPhase(int phase) { + if (phase == PHASE_SYSTEM_SERVICES_READY) { + mService.systemReady(); + } else if (phase == PHASE_BOOT_COMPLETED) { + mService.systemRunning(); + } + } + } + /** * Clears scores when the active scorer package is no longer valid and * manages the service connection. diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 6f50ee27d1341..5519d229faeab 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -725,7 +725,6 @@ public final class SystemServer { NetworkStatsService networkStats = null; NetworkPolicyManagerService networkPolicy = null; ConnectivityService connectivity = null; - NetworkScoreService networkScore = null; NsdService serviceDiscovery= null; WindowManagerService wm = null; SerialService serial = null; @@ -1090,12 +1089,7 @@ public final class SystemServer { } traceBeginAndSlog("StartNetworkScoreService"); - try { - networkScore = new NetworkScoreService(context); - ServiceManager.addService(Context.NETWORK_SCORE_SERVICE, networkScore); - } catch (Throwable e) { - reportWtf("starting Network Score Service", e); - } + mSystemServiceManager.startService(NetworkScoreService.Lifecycle.class); traceEnd(); traceBeginAndSlog("StartNetworkStatsService"); @@ -1728,7 +1722,6 @@ public final class SystemServer { final NetworkStatsService networkStatsF = networkStats; final NetworkPolicyManagerService networkPolicyF = networkPolicy; final ConnectivityService connectivityF = connectivity; - final NetworkScoreService networkScoreF = networkScore; final LocationManagerService locationF = location; final CountryDetectorService countryDetectorF = countryDetector; final NetworkTimeUpdateService networkTimeUpdaterF = networkTimeUpdater; @@ -1789,13 +1782,6 @@ public final class SystemServer { reportWtf("starting System UI", e); } traceEnd(); - traceBeginAndSlog("MakeNetworkScoreReady"); - try { - if (networkScoreF != null) networkScoreF.systemReady(); - } catch (Throwable e) { - reportWtf("making Network Score Service ready", e); - } - traceEnd(); traceBeginAndSlog("MakeNetworkManagementServiceReady"); try { if (networkManagementF != null) networkManagementF.systemReady(); @@ -1917,13 +1903,6 @@ public final class SystemServer { } traceEnd(); - traceBeginAndSlog("MakeNetworkScoreServiceReady"); - try { - if (networkScoreF != null) networkScoreF.systemRunning(); - } catch (Throwable e) { - reportWtf("Notifying NetworkScoreService running", e); - } - traceEnd(); traceBeginAndSlog("IncidentDaemonReady"); try { // TODO: Switch from checkService to getService once it's always