Android源码singleton示例
2018-11-21 本文已影响16人
2远
首先看下Singleton类的定义
package android.util;
/**
* Singleton helper class for lazily initialization.
*
* Modeled after frameworks/base/include/utils/Singleton.h
*
* @hide
*/
public abstract class Singleton<T> {
private T mInstance;
protected abstract T create();
public final T get() {
synchronized (this) {
if (mInstance == null) {
mInstance = create();
}
return mInstance;
}
}
}
其中get是final的方法,不可以覆盖,create是可以覆盖的
接下来看下Android源码中用到Singleton的一个示例
private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
protected IActivityManager create() {
IBinder b = ServiceManager.getService("activity");
if (false) {
Log.v("ActivityManager", "default service binder = " + b);
}
IActivityManager am = asInterface(b);
if (false) {
Log.v("ActivityManager", "default service = " + am);
}
return am;
}
};
上面的代码创建了一个Singleton实例,泛型填充的是IActivityManager,create方法中创建的也是这个IActivityManager
那么使用的时候如何使用呢,继续看下面的代码就一目了然了
/**
* Retrieve the system's default/global activity manager.
*/
static public IActivityManager getDefault() {
return gDefault.get();
}
对了,直接调用get方法就可以了。
以上就是一个Android源码中使用Singleton的示例,如果大家要用的话要把Singleton拷贝出来用,因为这个类被加了hide标签了