从Activity传递给非活动构造函数的上下文实例是什么?

时间:2012-05-01 16:42:27

标签: java android android-activity android-context

Android API中的几个类在其构造函数中需要Context参数,例如ArrayAdapterSQLiteOpenHelperIntent。从Activity内部创建这样的对象时,哪个上下文实例更适合传递给它们:this(活动实例本身)或活动的getApplicationContext()方法返回的对象和为什么呢?

到目前为止,我已经使用了两者,并没有看到产生的功能有任何区别。有没有经验法则?

1 个答案:

答案 0 :(得分:2)

来自getApplicationContext()方法的文档:

  

返回单个全局Application对象的上下文   目前的过程。这通常只应在需要的时候使用   生命周期与当前上下文分离的上下文,即   与过程的生命周期相关,而不是当前的组件。

  

例如考虑如何与{@ #registerReceiver(BroadcastReceiver,IntentFilter)}进行交互:

     
      
  • 如果从Activity上下文使用,则正在注册接收者   在那个活动中。这意味着您需要取消注册   在活动被销毁之前;事实上,如果你不这样做   因此,框架将清除您删除的泄漏注册   活动并记录错误。因此,如果您使用Activity上下文   注册一个静态的接收器(过程是全局的,不是   与Activity实例相关联)然后该注册将是   在您使用的活动被销毁的任何地方移除。

  •   
  • 如果在此处返回的上下文中使用,则接收器正在使用   在与您的申请相关的全球州注册。   因此,它永远不会为您注册。这是必要的,如果   接收器与静态数据相关联,而不是与特定组件相关联。   但是,在其他地方使用ApplicationContext很容易导致   如果你忘记取消注册,取消绑定等,则会发生严重泄漏。

  •