标签:
官方文档概述:关于应用程序环境的全局信息的接口。这是一个抽象类,它的实现是由安卓系统提供的。它允许访问应用程序特定的资源和类,以及应用级的操作,如启动活动,电话,广播和接收的意图,等等。 我感觉可以把context比喻成一个游乐园,你要玩过山车,海盗船这些就要在游乐园中玩。
ContextWrapper提供一系列方法。这样继承于它的Application,Service,Activitykey直接从它取得对应的方法。但是它的方法是空壳,具体功能由ContextImpl实现。
它们三者的对象就是一个context。因此在MainActivity中需要进行数据操作的时候的时候这样写
Editor editor = getSharedPreferences("Alarm", MODE_PRIVATE).edit();
但是在一个继承于LinearLayout的子类中,则需要这样写
Editor editor = getContext().getSharedPreferences("Alarm", Context.MODE_PRIVATE).edit();
因此,在MainActivity中,有时候需要传入Context的对象,可以看到直接用MainActivity.this 结合闹钟那个项目,在添加闹钟的时候
private void addAlarm(){ //添加一句输出 Log.d("Context", getContext()+""); ... }
会发现这里的context是MainActivity
文档提到,可以通过context来进行多项操作,但是不同的Context能力范围不一样,游乐园也有大小区别嘛。
Conext能做的通用操作决定于这个context最初来源于哪里。下表所列的是,在应用中常见的会收到context对象的,以及对应的每种情况,它可以用于哪些地方:
这可以结合安卓的那个闹钟项目
public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub ... Log.d("Context", getContext()+""); //启动响闹钟的界面 Intent i = new Intent(context, PlayMusic.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } }
可以发现这里的Context是ReceiverRestrictedContext,因此需要创建一个新的task
标签:
原文地址:http://www.cnblogs.com/Mihai/p/5601496.html