美文网首页
浅谈单例模式在自定义Application中的使用

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

作者: 奔跑的佩恩 | 来源:发表于2022-07-25 09:24 被阅读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)单例模式代码:

    相关文章

      网友评论

          本文标题:浅谈单例模式在自定义Application中的使用

          本文链接:https://www.haomeiwen.com/subject/cogwirtx.html