Application Context和单例模式

Google不推荐我们使用自定义的Application,基本上只有需要做一些全局初始化的时候才可能需要用到自定义Application。但多数项目只是把自定义Application当成了一个通用工具类,虽然没什么副作用但使用单例模式实现可能更加优雅。

 

但是把自定义Application和单例模式混合到一起使用,那就大错特错了。一个非常典型的例子如下所示:

public class MyApplication extends Application {  
    private static MyApplication app;  
    public static MyApplication getInstance() {  
        if (app == null) {  
            app = new MyApplication();  
        }  
        return app;  
    }   
}  

因为我们知道Application是属于系统组件,系统组件的实例是要由系统来去创建的,如果这里我们自己去new一个MyApplication的实例,它就只是一个普通的Java对象而已,而不具备任何Context的能力。我们只需谨记一点,Application全局只有一个,它本身就已经是单例了,无需再用单例模式去为它做多重实例保护了,正确代码如下所示:

public class MyApplication extends Application {  
    private static MyApplication app;  
    // getInstance()方法里面不需要任何逻辑判断,直接返回app对象就可以了
    public static MyApplication getInstance() {  
        return app;  
    }  
    @Override  
    public void onCreate() {  
        super.onCreate();  
       //this就是当前Application的实例,那么app也就是当前Application的实例了
        app = this;  
    }  
}  

 

转载于:https://www.cnblogs.com/yangjj08/p/11309252.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值