前言
之前在学习Kotlin
相关知识的时候,有讲到自定义Application
用单例模式实现的相关知识,大家有兴趣的话可参考以下文章
Kotlin笔记(61) — 自定义Application实现单例的方式
之所以现在对该单例模式的实现再次提起,原因是最近在看单例模式
实现方式方面的知识,大家有兴趣的话可以参看
单例模式(八)—单例模式总结
那么今天就让我们对自定义Application
单例模式的实现来重新认识和巩固下吧。
今天涉及以下知识:
- 自定义
Application
的操作 - 为什么自定义
Application
的单例实现,没有严格按单例模式写法实现 - 自定义
Application
单例模式代码
一. 自定义Application
的操作
关于自定义Application
的操作的操作,我在文章 Kotlin笔记(61) — 自定义Application实现单例的方式 中已经讲解过,这里就不再重复讲解了,大家有兴趣的话可跳转到该文章查看。
那么这里我们就假设在开发中继承Application
自定义Application
名为AppContext
。
二. 为什么自定义 Application 的单例实现,没有严格按单例模式写法实现
在实现单例模式的时候,我们知道,一般都会写一个private
无参构造函数,避免外界对该类实行了初始化创建。
但是在自定义 Application
单例实现的过程中,我们并没有去写一个private
无参构造函数,这是因为 在Android中,Application本身就是一个单例对象,并且我们在自定义 Application
单例实现的过程中不能用 new 一个 自定义 Application
对象的方式来写代码,因为查看Application
源码,我们可以看到以下代码:
public Application() {
super(null);
}
即若我们在实现自定义 Application
单例时,若调用了new 自定义Application ()
的话,就会调用以上super(null);
方法,进而调用以下代码:
public class ContextWrapper extends Context {
@UnsupportedAppUsage
Context mBase;
public ContextWrapper(Context base) {
mBase = base;
}
//以下代码省略
//......
}
就会偶尔导致程序报Applcation 对象或 Context 为 null
的问题。这为项目开发带来极大隐患。因此,自定义 Application
单例实现的写法,有了一些变化。
三. 自定义 Application 单例模式代码
下面给出自定义Application
(即AppContext
)单例模式代码:
网友评论