首先看下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;
}
}
}
其中g(shù)et是final的方法未妹,不可以覆蓋柿菩,create是可以覆蓋的
接下來看下Android源碼中用到Singleton的一個(gè)示例
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;
}
};
上面的代碼創(chuàng)建了一個(gè)Singleton實(shí)例龟劲,泛型填充的是IActivityManager斑唬,create方法中創(chuàng)建的也是這個(gè)IActivityManager
那么使用的時(shí)候如何使用呢檀训,繼續(xù)看下面的代碼就一目了然了
/**
* Retrieve the system's default/global activity manager.
*/
static public IActivityManager getDefault() {
return gDefault.get();
}
對了王带,直接調(diào)用get方法就可以了砰嘁。
以上就是一個(gè)Android源碼中使用Singleton的示例件炉,如果大家要用的話要把Singleton拷貝出來用,因?yàn)檫@個(gè)類被加了hide標(biāo)簽了