Java 是否认为使用getApplicationContext()有害?
昨天我读到使用getApplicationContext()有潜在的危险。因此,代码如下所示:Java 是否认为使用getApplicationContext()有害?,java,android,Java,Android,昨天我读到使用getApplicationContext()有潜在的危险。因此,代码如下所示: Toast.makeText(getApplicationContext(), "You mashed the button, dude.", Toast.LENGTH_SHORT).show(); …应该是这样的: Toast.makeText(MainActivity.this, "You mashed the button, dude.", Toast.LENGTH_SHORT).show()
Toast.makeText(getApplicationContext(), "You mashed the button, dude.", Toast.LENGTH_SHORT).show();
…应该是这样的:
Toast.makeText(MainActivity.this, "You mashed the button, dude.", Toast.LENGTH_SHORT).show();
(其中“MainActivity”是代码所在的类的名称)
但我看到了许多包含getApplicationContext()的代码片段,例如:
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
_initTask = new InitTask();
_initTask.execute( getApplicationContext() );
}
});
…来自。使用.this而不是getApplicationContext()真的更可取吗
使现代化
很明显,我仍然不理解这件事的细节(或意义);使用此代码:
Toast.makeText(GetVendorsTask.this, s[0], Toast.LENGTH_SHORT).show();
我得到这个编译错误消息:
错误:(156,18)错误:找不到适合makeText的方法(MainActivity.GetVendorTask,String,int)
方法Toast.makeText(Context、CharSequence、int)不适用
(参数不匹配;MainActivity.GetVendorTask无法转换为上下文)
方法Toast.makeText(Context,int,int)不适用
(参数不匹配;MainActivity.GetVendorTask无法转换为上下文)
因此,我将“投诉”代码行更改为:
Toast.makeText(MainActivity.this, s[0], Toast.LENGTH_SHORT).show();
…它可以工作(编译)MainActivity
是.java文件中最外层的类(即名为MainActivity.java);但是GetVendorsTask
是最接近的类(该行代码在GetVendorsTask
类中)。明确地说,代码是:
public class MainActivity extends ActionBarActivity {
. . .
class GetVendorsTask extends AsyncTask<Context, String, SearchResponse>
{
. . .
@Override
protected void onProgressUpdate(String... s)
{
super.onProgressUpdate(s);
//Toast.makeText(getApplicationContext(), s[0], Toast.LENGTH_SHORT).show(); <= "getApplicationContext()" might be null
//Toast.makeText(GetVendorsTask.this, s[0], Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, s[0], Toast.LENGTH_SHORT).show();
}
公共类MainActivity扩展了ActionBarActivity{
. . .
类GetVendorsTask扩展了AsyncTask
{
. . .
@凌驾
受保护的void onProgressUpdate(字符串…s)
{
super.onProgressUpdate(s);
//Toast.makeText(getApplicationContext(),s[0],Toast.LENGTH\u SHORT.show())无论你在做什么,最好传递最低要求的上下文
。将应用程序上下文视为一种god对象可以暂时隐藏由于滥用生命周期方法而产生的问题。无论你在做什么,最好传递最低要求的上下文
。处理应用程序上下文作为一种god对象可以暂时隐藏由于生命周期方法的误用而产生的问题。应用程序上下文是一个单例类,它将始终返回相同的上下文实例,无论您在应用程序的何处。换句话说,应用程序应用程序运行,ode>Context
就会一直存在
另一方面,将活动
用于上下文
将特定于该活动
,并且它不同于应用程序
上下文
。例如,您可以使用活动
上下文
来显示一个对话框
,但不能使用应用程序
上下文ntext
这是一个更详细的解释
另外,我推荐post也不够;当我阅读它时,它为我澄清了不少主题。应用程序是一个单例类,无论您在应用程序的哪个位置,它都会返回相同的上下文
实例。换句话说,应用程序
只要您的应用程序运行,上下文将一直存在
另一方面,将活动
用于上下文
将特定于该活动
,并且它不同于应用程序
上下文
。例如,您可以使用活动
上下文
来显示一个对话框
,但不能使用应用程序
上下文ntext
这是一个更详细的解释
另外,我推荐的帖子还不够多,当我读到它时,它为我澄清了很多话题。嘿,克莱,应用程序上下文危险的原因是什么?你有文章链接吗?嘿,克莱,应用程序上下文危险的原因是什么?你有文章链接吗?