48 lines
1.6 KiB
Java
Executable File
48 lines
1.6 KiB
Java
Executable File
// Copyright 2012 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
package org.chromium.base;
|
|
|
|
import android.content.Context;
|
|
|
|
import java.lang.ref.WeakReference;
|
|
import java.util.concurrent.Callable;
|
|
|
|
/**
|
|
* Holds a WeakReference to Context to allow it to be GC'd.
|
|
* Also provides utility functions to getSystemService from the UI or any
|
|
* other thread (may return null, if the Context has been nullified).
|
|
*/
|
|
public class WeakContext {
|
|
private static WeakReference<Context> sWeakContext;
|
|
|
|
public static void initializeWeakContext(final Context context) {
|
|
sWeakContext = new WeakReference<Context>(context);
|
|
}
|
|
|
|
public static Context getContext() {
|
|
return sWeakContext.get();
|
|
}
|
|
|
|
// Returns a system service. May be called from any thread.
|
|
// If necessary, it will send a message to the main thread to acquire the
|
|
// service, and block waiting for it to complete.
|
|
// May return null if context is no longer available.
|
|
public static Object getSystemService(final String name) {
|
|
final Context context = sWeakContext.get();
|
|
if (context == null) {
|
|
return null;
|
|
}
|
|
if (ThreadUtils.runningOnUiThread()) {
|
|
return context.getSystemService(name);
|
|
}
|
|
return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Object>() {
|
|
@Override
|
|
public Object call() {
|
|
return context.getSystemService(name);
|
|
}
|
|
});
|
|
}
|
|
}
|