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

1.两种上下文: 

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

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

 

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

 1 package com.itheima.context;
 2 
 3 import android.app.Activity;
 4 import android.app.AlertDialog;
 5 import android.app.AlertDialog.Builder;
 6 import android.os.Bundle;
 7 import android.view.View;
 8 import android.widget.TextView;
 9 
10 public class MainActivity extends Activity {
11 
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_main);
16        (1)TextView tv = new TextView(MainActivity.this); //这里不能使用getApplicationContext()
17     }
18     
19     public void click(View view){
20        (2) AlertDialog.Builder builder = new Builder(this);
21         builder.setTitle("警告");
22         builder.setMessage("对话框出来了");
23         builder.setPositiveButton("确定", null);
24         builder.show();
25     }
26 
27 }

在上面(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界面

原文地址:https://www.cnblogs.com/hebao0514/p/4798393.html