是否有任何事情只能由ApplicationContext
但ActivityContext
实现,反之亦然?
答案 0 :(得分:0)
getApplicationContext()
几乎总是错的。 Hackborn女士(以及其他人)非常明确地表示,当您知道自己使用getApplicationContext()
的原因并仅在需要使用getApplicationContext()
时才使用getApplicationContext()
。
说实话,“一些程序员”使用getApplicationContext()
(或getBaseContext()
,在较小程度上),因为他们的Java经验有限。它们实现了一个内部类(例如,一个Activity中的Button的OnClickListener
)并且需要一个Context。他们使用MyActivity.this
或getApplicationContext()
来获取Context对象,而不是使用getBaseContext()
来获取外部类。
当您知道某些内容可能比您拥有的任何其他可能的上下文更长时,您只需使用getApplicationContext()
。场景包括:
如果您需要绑定到本身具有全局范围的Context,请使用getApplicationContext()
。我在getApplicationContext()
中使用WakefulIntentService
作为服务使用的静态WakeLock
。由于WakeLock
是静态的,我需要Context
来PowerManager
来创建它,因此使用getApplicationContext()
是最安全的。
如果您希望在{{{}之间传递getApplicationContext()
(即绑定句柄),则绑定Service
Activity
时使用ServiceConnection
1}}个实例来自Activity
。 Android通过这些onRetainNonConfigurationInstance()
内部跟踪绑定,并保存对创建绑定的ServiceConnections
的引用。如果您从Context
绑定,那么新的Activity
实例将引用Activity
,其中隐含引用旧ServiceConnection
和旧Activity
1}}不能被垃圾收集。