標籤:
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 @Override13 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會變成null 指標,導致記憶體泄露。
(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:內容相關的區分