Android源码singleton示例

首先看下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标签了

    原文作者:2远
    原文地址: https://www.jianshu.com/p/1f45ff480790
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞