标签:
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界面
标签:
原文地址:http://www.cnblogs.com/hebao0514/p/4798393.html