Android - 为啥人们反复引用静态上下文内联,而不是在 Method() 中传递一次?

Posted

技术标签:

【中文标题】Android - 为啥人们反复引用静态上下文内联,而不是在 Method() 中传递一次?【英文标题】:Android - Why people refer to a static context inline repeatedly, instead of pass it in the Method() once?Android - 为什么人们反复引用静态上下文内联,而不是在 Method() 中传递一次? 【发布时间】:2019-07-19 08:05:16 【问题描述】:

我即将完成我的第一个真正的应用程序.. 在我的道路上(过去几年),我看到了很多代码示例。 一件事是一致的:我总是看到使用静态 context 引用,例如:getApplicationContext()this.getActivity(),以及许多其他此类引用.. 但是今天早些时候,在询问如何从接收器中的方法中检索上下文之后,我被告知只是“将上下文传递给它”,例如:public void receiverMethodCall(Context context)我的问题是: 如果就这么简单,为什么人们经常在他们的代码中反复进行静态上下文引用,一遍又一遍,而不是简单地将包含方法a Context 以开头,然后使用“context”引用它"什么时候需要?

【问题讨论】:

【参考方案1】:

我希望我明白了你的问题的含义——你得到了答案,并被告知将上下文作为上下文类型变量传递——但不要忘记,当你想调用你的方法并传递一个上下文时,你会有知道这个上下文是什么并对其进行初始化。例如,如果你想制作一个 Toast 方法参数之一是上下文,如果你使用了很多 Toast最好有上下文引用并在每次要显示 Toast 时使用它(或使用任何其他需要上下文的方法。)而不是使用 this.getActivity()getApplicationContext()。这样做可以防止一个重复的代码,你不需要在代码中多次引用上下文,现在关于“为什么人们经常在他们的代码中内联重复静态上下文引用”的问题。 我可以想到一种情况,即进行 2 个上下文引用并不是一件坏事:假设您在同一个 activ 中有 2 个方法使用上下文的实体 - 如果这些方法被使用一次,那么您可以在方法内创建上下文引用并让垃圾收集器处理该引用。我不得不说我同意你的观点,我认为如果它的可选只是将上下文传递给您的方法并让它使用它,那么它非常简单的解决方案。

【讨论】:

谢谢 Tamir,看来你同意我的看法。它可能.. 相反,他们会重复(而且通常过于复杂)调用来获取上下文。其他人能否进一步解释为什么不定期这样做? 附言。必须在原始(调用)方法变量中传递上下文才能执行此操作,例如在onReceive 中,如果是这样,您可以简单地将context 变量添加到 Activity 以便它可以传递给它的方法,就像容易吗? 是的,您可以保存 Context 变量并在每次需要带有上下文的方法时调用它 - 但如果您不经常使用上下文,最好不要使用全局变量和将其用作局部变量。对于您的第一个问题 - 那里有很多程序员或不同的程序员,他们中的一些人似乎只想以最快的方式解决问题,即使这意味着使用重复调用来获取上下文参考。 我赞成并接受了您的回答.. 看起来很可靠。再次感谢您花时间澄清并提出您的想法。

以上是关于Android - 为啥人们反复引用静态上下文内联,而不是在 Method() 中传递一次?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 C++17 中的全局内联变量和静态内联成员需要守卫?

java ,为啥无法从静态上下文中引用非静态方法

Android - 无法从静态上下文中引用 executePendingTransactions

为啥不允许“内联”静态常量,除了整数?

为啥 std::stringstream 在静态内联时不能默认构造?

为啥内联 JavaScript 在引用 JavaScript 错误时起作用 [重复]