Android中的Context

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中顺利读取。

原文地址:https://www.cnblogs.com/dracohan/p/5985875.html