码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-09-10 19:30:56      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

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界面

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

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!