Android(java)学习笔记223:上下文的区分

时间:2022-10-16 19:57:56

1.两种上下文: 

(1)Activity.this                               界面的上下文

(2)getApplicationContext()         整个应用程序的上下文

Android(java)学习笔记223:上下文的区分

 

2.通常是两者是可以互用,但是如下对话框创建的场景,就只能使用Activity.this,如下:

 package com.itheima.context;

 import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
(1)TextView tv = new TextView(MainActivity.this); //这里不能使用getApplicationContext()
} public void click(View view){
(2) AlertDialog.Builder builder = new Builder(this);
builder.setTitle("警告");
builder.setMessage("对话框出来了");
builder.setPositiveButton("确定", null);
builder.show();
} }

在上面(1)和(2)中不能使用getApplicationContext():

(1)TextView tv = new TextView(MainActivity.this);tv是依赖Activity(界面而存在的);Activity销毁,tv也会销毁

如果使用TextView tv = new TextView(getApplicationContext()),可能Activity销毁了,但是整个应用程序还没有销毁,这样这个tv会变成空指针,导致内存泄露。

 

(2)AlertDialog.Builder builder = new Builder(MainActivity.this);

同样创建对话框,对话框也是依赖Activity而存在的,如果使用AlertDialog.Builder builder = new Builder(getApplicationContext());

这个getApplicationContext()是Activity的父类,父类可能由很多子类Activity继承,这样对话框不能定位在哪个Activity上显示,会报错。

 

(1)和(2)中tv和builder的显示都必须绑定特定的Activity界面