Misc ActivityManagerNative cleanup.
Change-Id: Ib1fba1a72d074a12b44cce64741071815cb680f3
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 273e3c6..f3cc4ee 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -41,6 +41,7 @@
import android.text.TextUtils;
import android.util.Config;
import android.util.Log;
+import android.util.Singleton;
import java.util.ArrayList;
import java.util.List;
@@ -52,8 +53,7 @@
* Cast a Binder object into an activity manager interface, generating
* a proxy if needed.
*/
- static public IActivityManager asInterface(IBinder obj)
- {
+ static public IActivityManager asInterface(IBinder obj) {
if (obj == null) {
return null;
}
@@ -62,27 +62,15 @@
if (in != null) {
return in;
}
-
+
return new ActivityManagerProxy(obj);
}
-
+
/**
* Retrieve the system's default/global activity manager.
*/
- static public IActivityManager getDefault()
- {
- if (gDefault != null) {
- //if (Config.LOGV) Log.v(
- // "ActivityManager", "returning cur default = " + gDefault);
- return gDefault;
- }
- IBinder b = ServiceManager.getService("activity");
- if (Config.LOGV) Log.v(
- "ActivityManager", "default service binder = " + b);
- gDefault = asInterface(b);
- if (Config.LOGV) Log.v(
- "ActivityManager", "default service = " + gDefault);
- return gDefault;
+ static public IActivityManager getDefault() {
+ return gDefault.get();
}
/**
@@ -95,13 +83,12 @@
return sSystemReady;
}
static boolean sSystemReady = false;
-
+
/**
* Convenience for sending a sticky broadcast. For internal use only.
* If you don't care about permission, use null.
*/
- static public void broadcastStickyIntent(Intent intent, String permission)
- {
+ static public void broadcastStickyIntent(Intent intent, String permission) {
try {
getDefault().broadcastIntent(
null, intent, null, null, Activity.RESULT_OK, null, null,
@@ -117,8 +104,7 @@
}
}
- public ActivityManagerNative()
- {
+ public ActivityManagerNative() {
attachInterface(this, descriptor);
}
@@ -1390,16 +1376,27 @@
}
}
-
+
return super.onTransact(code, data, reply, flags);
}
- public IBinder asBinder()
- {
+ public IBinder asBinder() {
return this;
}
- private static IActivityManager gDefault;
+ private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
+ protected IActivityManager create() {
+ IBinder b = ServiceManager.getService("activity");
+ if (Config.LOGV) {
+ Log.v("ActivityManager", "default service binder = " + b);
+ }
+ IActivityManager am = asInterface(b);
+ if (Config.LOGV) {
+ Log.v("ActivityManager", "default service = " + am);
+ }
+ return am;
+ }
+ };
}
class ActivityManagerProxy implements IActivityManager