Android关于Context的简单理解

我相信大家在android开发的过程中都遇到过这样的问题,特别是初级的android程序员,再启动Activity,弹出Dialog等的时候,使用的Context不是Activity的时候应用会报错,因为他们依赖于Activity。
今天正好看到了郭大侠的博客,有对这个的介绍,就简单的看了一下,现在转载一下,大家可以看看,理解理解
好了,言归正传,Context到底是什么呢?大家都知道,是上下文环境,那么上下文环境又是什么呢?
好,那么我们先来看一张图片,然后再理解一下:
这里写图片描述
我们可以看到,Context是站在实录连最顶层的男人,哈哈,开玩笑了,他下面还有ContextWrapper和ContextImpl,这俩我们或许不熟悉,没关系,我们继续往下看。在ContextWrapper下面是Application和Service,ContextThemeWrapper,最后就是Activity了。
好了,这下就很清楚了:
ContextWrapper是Context的封装类,而ContextImpl是他的实现类。
Context一共有三种类型,分别是Application、Activity和Service。这三个类虽然分别各种承担着不同的作用,但它们都属于Context的一种,而它们具体Context的功能则是由ContextImpl类去实现的。
由于Context的具体能力是由ContextImpl类去实现的,因此在绝大多数场景下,Activity、Service和Application这三种类型的Context都是可以通用的。不过有几种场景比较特殊,比如启动Activity,还有弹出Dialog。出于安全原因的考虑,Android是不允许Activity或Dialog凭空出现的,一个Activity的启动必须要建立在另一个Activity的基础之上,也就是以此形成的返回栈。而Dialog则必须在一个Activity上面弹出(除非是System Alert类型的Dialog),因此在这种场景下,我们只能使用Activity类型的Context,否则将会出错。
Service和Activity大家应该都很熟悉,然后我们就讲一下比较容易被滥用的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只是一个简单的类,并没有Context的属性,Application是一个系统的类,他是需要系统去创建的。
其实系统本身提供的Application就是一个单例,无需我们自己去多做什么。

public class MyApplication extends Application {  

    private static MyApplication app;  

    public static MyApplication getInstance() {  
        return app;  
    }  

    @Override  
    public void onCreate() {  
        super.onCreate();  
        app = this;  
    }  

} 

好了,这就是简单的对Context的理解,详情大家也可以去查看郭大侠的博客。
大侠博客直通车:http://blog.csdn.net/guolin_blog/article/details/47028975

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值