Context用来访问全局信息的接口,比如影城程序的资源。一些常用的组件都是继承自Context,目的就是方便的访问资源,比如Activity, Service....
从Context访问本组件的资源:
public class MainActivity extends AppCompatActivity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); tv = new TextView(this); tv.setText(R.string.str); setContentView(tv); ...
this是一个Context,通过调用setText函数的参数最终会以到以下形式:
getContext().getResources().getText(R.string.str)
当然除了获得字符串资源,也可以得到图片资源:
ImageView iv = new ImageView(this); iv.setImageResource(R.mipmap.ic_launcher);
可以使用Context做组件之间的信息共享:
在AndroidMenifest.xml的application标签中指定android:name可以设置Android的application,这个application是全局的。
<application
android:name=".App"
android:allowBackup="true"
getApplicationContext()就可以得到全局的Context,这个Context可以在全局所有组件中进行共享。
比如,application下有两个activity标签,在这两个activity中都可以通过这个Context的getTextData|setTextData进行数据共享。
只要application没有被杀死,那么这两个activity之间就可以用这个Context进行通信。
//Activity1 tv.setText("共享的数据是:" + getApp().getTextData()); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getApp().setTextData(et.getText().toString()); tv.setText("共享的数据是:" + getApp().getTextData()); } });
//Activity2 tv.setText("共享的数据是:" + getApp().getTextData()); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getApp().setTextData(et.getText().toString()); tv.setText("共享的数据是:" + getApp().getTextData()); } });
把这两个Activity都设置成启动Activity,一个Activity设置的TextData可以在另外一个Activity中顺利读取。