应该使用getApplicationContext()创建toasts吗?

时间:2014-06-23 16:00:59

标签: android toast

我正在阅读the android documentation以获取祝酒词,并注意到示例代码使用getApplicationContext()而不是getActivity()this。来自文档:

Context context = getApplicationContext();
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, text, duration);
toast.show();

根据other sources,我了解使用getApplicationContext()通常是不好的做法。吐司不知怎的例外?如果是这样,为什么?或者Android文档在这种情况下是错误的吗?

3 个答案:

答案 0 :(得分:4)

  

我已经了解使用getApplicationContext()通常是不好的做法

当您知道为什么使用Application时,我会将其描述为“使用Application”。太多Android开发人员的Java经验可以忽略不计,被内部类感到困惑,并认为他们需要调用getApplicationContext()(或getBaseContext())来将Context作为参数传递给某些东西或另一个。

关于不同Context实现的角色的

Dave Smith's epic blog post涵盖了相当多的常见用例......尽管Toast不在其中。

  

以某种方式吐司是个例外吗?如果是这样,为什么?

Toast使用Application作为Context,但没有必要使用Application来展示Toast

  

或者Android文档在这种情况下是错误的吗?

在代码有效的情况下,它们没有错。 The JavaDocs for Toast在各个地方都指出Activity也可以使用Context,我在the Toast source code中看不到任何其他内容。

答案 1 :(得分:0)

重要的是要注意即使您的上下文不可见或不能控制任何UI,也可以使用Toast。换句话说,文档指出您可以拥有最小的上下文(如服务中的上下文)并仍然使用Toast。

我不相信文档试图为使用Context提供“最佳实践”,而是要正确演示Toast的这个属性。

答案 2 :(得分:0)

使用应用程序上下文时,Toast本地化字符串出现问题。它可以与活动正常配合。