浅谈单例模式在自定义Application中的使用

2022-07-25  本文已影响0人  奔跑的佩恩

前言

之前在学习Kotlin相关知识的时候,有讲到自定义Application用单例模式实现的相关知识,大家有兴趣的话可参考以下文章
Kotlin笔记(61) — 自定义Application实现单例的方式
之所以现在对该单例模式的实现再次提起,原因是最近在看单例模式实现方式方面的知识,大家有兴趣的话可以参看
单例模式(八)—单例模式总结
那么今天就让我们对自定义Application单例模式的实现来重新认识和巩固下吧。
今天涉及以下知识:

  1. 自定义Application的操作
  2. 为什么自定义Application的单例实现,没有严格按单例模式写法实现
  3. 自定义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)单例模式代码:

上一篇 下一篇

猜你喜欢

热点阅读