当前位置: 移动技术网 > IT编程>移动开发>Android > Android源码Singleton的代码分析

Android源码Singleton的代码分析

2018年09月16日  | 移动技术网IT编程  | 我要评论

大高静流,女儿丸,渝西之窗党建新农村建设

0x01:activitymanagernative中的singleton

今天在研究activitymanagernative的时候看到一段代码:

private static final singleton gdefault = new singleton() {
  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;
  }
 };

该类是位于”android.util.singleton”中,遂在该目录下找到该文件。打开下,发现代码其实很简单

package android.util;

/**
 * singleton helper class for lazily initialization.
 *
 * modeled after frameworks/base/include/utils/singleton.h
 *
 * @hide
 */
public abstract class singleton {
 private t minstance;

 protected abstract t create();

 public final t get() {
  synchronized (this) {
if (minstance == null) {
 minstance = create();
}
return minstance;
  }
 }
}

使用:

 // 以匿名内部类的方式发布出去,注意这里是有static final修饰的
 private static final singleton gdefault = new singleton() {
  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;
  }
 };

 /**
  * retrieve the system's default/global activity manager.
  */
 static public iactivitymanager getdefault() {
  return gdefault.get();
 }

该类主要利用的是泛型,再结合懒加载的方式来实现的。注意到该类是被隐藏的,所以开发者其实是不能使用到这个的。当然我们可以自己拷贝一个出去,用于我们的项目,以便提高封装。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网