Merge "Don\'t pass calling contexts into static services." into nyc-dev
am: 7f2b6e2a84
* commit '7f2b6e2a8492d2b751f1695a747aef5f53d30d8c':
Don't pass calling contexts into static services.
This commit is contained in:
@@ -226,7 +226,7 @@ final class SystemServiceRegistry {
|
||||
SYSTEM_SERVICE_NAMES.put(android.text.ClipboardManager.class, Context.CLIPBOARD_SERVICE);
|
||||
|
||||
registerService(Context.CONNECTIVITY_SERVICE, ConnectivityManager.class,
|
||||
new StaticOuterContextServiceFetcher<ConnectivityManager>() {
|
||||
new StaticApplicationContextServiceFetcher<ConnectivityManager>() {
|
||||
@Override
|
||||
public ConnectivityManager createService(Context context) {
|
||||
IBinder b = ServiceManager.getService(Context.CONNECTIVITY_SERVICE);
|
||||
@@ -840,22 +840,21 @@ final class SystemServiceRegistry {
|
||||
}
|
||||
|
||||
/**
|
||||
* Like StaticServiceFetcher, creates only one instance of the service per process, but when
|
||||
* creating the service for the first time, passes it the outer context of the creating
|
||||
* component.
|
||||
* Like StaticServiceFetcher, creates only one instance of the service per application, but when
|
||||
* creating the service for the first time, passes it the application context of the creating
|
||||
* application.
|
||||
*
|
||||
* TODO: Is this safe in the case where multiple applications share the same process?
|
||||
* TODO: Delete this once its only user (ConnectivityManager) is known to work well in the
|
||||
* case where multiple application components each have their own ConnectivityManager object.
|
||||
*/
|
||||
static abstract class StaticOuterContextServiceFetcher<T> implements ServiceFetcher<T> {
|
||||
static abstract class StaticApplicationContextServiceFetcher<T> implements ServiceFetcher<T> {
|
||||
private T mCachedInstance;
|
||||
|
||||
@Override
|
||||
public final T getService(ContextImpl ctx) {
|
||||
synchronized (StaticOuterContextServiceFetcher.this) {
|
||||
synchronized (StaticApplicationContextServiceFetcher.this) {
|
||||
if (mCachedInstance == null) {
|
||||
mCachedInstance = createService(ctx.getOuterContext());
|
||||
mCachedInstance = createService(ctx.getApplicationContext());
|
||||
}
|
||||
return mCachedInstance;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user