我正在阅读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文档在这种情况下是错误的吗?
答案 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本地化字符串出现问题。它可以与活动正常配合。