有关Context,this,getBaseContext()问题(整理)
来源:互联网 发布:apache怎么读 编辑:程序博客网 时间:2024/04/19 08:47
getApplicationContext() 返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁Activity.this的context 返回当前activity的上下文,属于activity ,activity 摧毁他就摧毁getBaseContext() 返回由构造函数指定或setBaseContext()设置的上下文this.getApplicationContext()取的是这个应 用程序的Context,Activity.this取的是这个Activity的Context,这两者的生命周期是不同 的,前者的生命周期是整个应用,后者的生命周期只是它所在的Activity。
在开发Android的过程中,总是能遇见Context类或者它的实例。Context类的实例经常被用来提供“应用程序”的引用。例如下面的代码片段,Toast类的第一个参数接受一个Context对象:
[java]
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case 0:
Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("This is a dialog with some simple text...");
builder.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
Toast.makeText(getBaseContext(), "OK clicked!",
Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
Toast.makeText(getBaseContext(), "Cancel clicked!",
Toast.LENGTH_SHORT).show();
}
});
builder.setMultiChoiceItems(items, itemsChecked,
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
Toast.makeText(
getBaseContext(),
items[which]
+ (isChecked ? " checked!"
: " unchecked!"),
Toast.LENGTH_SHORT).show();
}
});
return builder.create();
}
return null;
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case 0:
Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("This is a dialog with some simple text...");
builder.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
Toast.makeText(getBaseContext(), "OK clicked!",
Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
Toast.makeText(getBaseContext(), "Cancel clicked!",
Toast.LENGTH_SHORT).show();
}
});
builder.setMultiChoiceItems(items, itemsChecked,
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
Toast.makeText(
getBaseContext(),
items[which]
+ (isChecked ? " checked!"
: " unchecked!"),
Toast.LENGTH_SHORT).show();
}
});
return builder.create();
}
return null;
}
然而,Toast类并没有直接用在Activity中,它被用在了AlertDialog类中。所以,这里需要通过getBaseContext()方法获取一个Context类的实例。
在Activity中动态地创建一个视图的时候也会遇见Context。例如,如果想通过硬编码动态地创建一个TextView:
[java]
TextView tv = new TextView(this);
TextView tv = new TextView(this); TextView的构造器接受一个Context对象,因为Activity类是Context类的子类,所以可以用this关键字来代替这个Conext对象。
提示:
使用this动态地创建视图,例如TextView、Button,存在一个潜在的风险——内存泄漏。所以,尽可能地使用getApplicationContext()方法替代this。
- 有关Context,this,getBaseContext()问题(整理)
- Android 中几个Context的区别,getApplicationContext(),Activity.this,getBaseContext()
- Context —— getApplicationContext()、getBaseContext()、this的区别
- 【android】关于getBaseContext();this等-----项目中遇到的问题
- getApplicationContext()、Activity.this、 getBaseContext区别
- getApplicationContext()、getBaseContext()、this的区别
- getApplicationContext()、Activity.this、 getBaseContext区别
- getApplicationContext()、Activity.this、 getBaseContext区别
- getApplicationContext()、Activity.this、 getBaseContext区别
- getApplicationContext()、Activity.this、getBaseContext区别
- getApplicationContext()、Activity.this、 getBaseContext区别
- this、getBasecontext和getApplicationContext区别
- getApplicationContext()、getBaseContext()、this的区别
- getApplicationContext()、Activity.this、 getBaseContext区别
- activity.this 和context (小结)
- andriod context 与 Activity.this与this.getApplicationContext()区别
- getApplication()、getApplicationContext()、getBaseContext()、MainActivity.this、this
- getApplicationContext与Activity.this,getBaseContext的区别
- 自定义的旋转3D效果
- 求一元二次方程(改)
- PAT (Advanced Level) Practise 1015. Reversible Primes (20)
- 汇编 求字符串长度
- 3D旋转
- 有关Context,this,getBaseContext()问题(整理)
- linux内核makefile——寻找第一个target
- CGAffineTransfrom 1.transform 2.scale 3.Rotation
- UVa 12377 - Number Coding
- leetcode Search for a Range
- leetcode - Regular Expression Matching
- 第9周项目2计算结果
- HDU 2149 Public Sale 巴什博奕(Bash Game)
- 解压文件