你对Context了解多少

作者: 雾里看花最是迷人 | 来源:发表于2016-08-10 23:56 被阅读185次

    说起Context,在编写android代码时基本离不开它,吐司的使用、启动服务、创建对话框等等,先看下官方文档的说明

    Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.

    说的是 context是一个应用全局信息的接口(习惯叫法就是上下文对象)。它是一个抽象类,而这个抽象类是由android系统进行实现的。它被允许访问特定的资源和类,可以到达通话级别的操作,比如启动一个活动、广播、接受intent传递的信息等等

    context的传递:
    在同一个Activity中,通常直接使用Activity.this即可,或者使用getApplicationContext(),比如在使用Toast时;如果是在View中加载视图时,一般可以直接使用getContext(),比如LayoutInflater.from(getContext).inflater(R.layout.item, null);
    面对这些使用,如果不是在本类中,那么久不能这么用了,因此需要采用一种方法统一获取context,如下

    Android系统提供了一个Application类,当应用启动时,系统会初始这个类,所以可以借助这个类来管理context

    public class MyApplication extends Application { private static Context context; @Override public void onCreate() { context = getApplicationContext(); } public static Context getContext(){ return context; } }

    还用这个类需要在清单文件中指定,在<application>中指定即可,如下
    <application android:name = ".MyApplication" ...>
    然后在其他类中获取context时,就可以直接使用MyApplication.getContext()

    注意的问题:这种方法对于dialog这种类型的,不能获得使用该方法获取的context,因为dialog必须是使用Acivity的context(发现有篇博客是具体讲这个原因的),如果涉及到非得在其他类中获得Activity的context(比如在把创建对话框写在其他类中),那么则可以在该类中重写构造方法,并指明参数是Context对象,如
    public A(Context context){ this.context = context }
    因此在Activity中中初始化该类时,可以传递参数为Activity.this,这样就会通过构造函数把Activity的context传递过去,就可以在该类中使用Activity的context了

    可能讲的不是那么到位,水平有限,欢迎各抒己见,共同进步哈

    相关文章

      网友评论

        本文标题:你对Context了解多少

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