是否只能通过ApplicationContext实现,但ActivityContext可以实现,反之亦然?

时间:2015-10-06 05:13:37

标签: android android-intent android-activity

是否有任何事情只能由ApplicationContextActivityContext实现,反之亦然?

1 个答案:

答案 0 :(得分:0)

getApplicationContext()几乎总是错的。 Hackborn女士(以及其他人)非常明确地表示,当您知道自己使用getApplicationContext()的原因并仅在需要使用getApplicationContext()时才使用getApplicationContext()

说实话,“一些程序员”使用getApplicationContext()(或getBaseContext(),在较小程度上),因为他们的Java经验有限。它们实现了一个内部类(例如,一个Activity中的Button的OnClickListener)并且需要一个Context。他们使用MyActivity.thisgetApplicationContext()来获取Context对象,而不是使用getBaseContext()来获取外部类。

当您知道某些内容可能比您拥有的任何其他可能的上下文更长时,您只需使用getApplicationContext()。场景包括:

如果您需要绑定到本身具有全局范围的Context,请使用getApplicationContext()。我在getApplicationContext()中使用WakefulIntentService作为服务使用的静态WakeLock。由于WakeLock是静态的,我需要ContextPowerManager来创建它,因此使用getApplicationContext()是最安全的。

如果您希望在{{{}之间传递getApplicationContext()(即绑定句柄),则绑定Service Activity时使用ServiceConnection 1}}个实例来自Activity。 Android通过这些onRetainNonConfigurationInstance()内部跟踪绑定,并保存对创建绑定的ServiceConnections的引用。如果您从Context绑定,那么新的Activity实例将引用Activity,其中隐含引用旧ServiceConnection和旧Activity 1}}不能被垃圾收集。