Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否认为使用getApplicationContext()有害?_Java_Android - Fatal编程技术网

Java 是否认为使用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()

昨天我读到使用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();
(其中“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

这是一个更详细的解释


另外,我推荐的帖子还不够多,当我读到它时,它为我澄清了很多话题。

嘿,克莱,应用程序上下文危险的原因是什么?你有文章链接吗?嘿,克莱,应用程序上下文危险的原因是什么?你有文章链接吗?