Android源码Singleton的代码分析
程序员文章站
2022-10-16 16:29:57
0x01:activitymanagernative中的singleton
今天在研究activitymanagernative的时候看到一段代码:
private static final s...
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(); }
该类主要利用的是泛型,再结合懒加载的方式来实现的。注意到该类是被隐藏的,所以开发者其实是不能使用到这个的。当然我们可以自己拷贝一个出去,用于我们的项目,以便提高封装。
上一篇: Android 项目架构 组件化基础介绍
下一篇: Python3开发环境准备
推荐阅读
-
PHP中获取变量的变量名的一段代码的bug分析
-
python 随机数生成的代码的详细分析
-
art-template的小demo分享(代码分析)
-
判断iOS、Android以及PC端的示例代码
-
android自定义波浪加载动画的实现代码
-
Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析
-
Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
-
Android实现人脸支付的示例代码
-
ORACLE常见错误代码的分析与解决(一)
-
Android Imageloader的配置的实现代码