Android开发经验谈Android知识程序员

你对Context了解多少

2016-08-10  本文已影响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了

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

上一篇下一篇

猜你喜欢

热点阅读