Context

作者: 转岗做JAVA | 来源:发表于2021-07-05 15:11 被阅读0次

1. 继承关系

继承关系

2. 作用域

作用域

3. 获取Context

通常我们想要获取 Context 对象,主要有以下四种方法:

  • View.getContext:返回当前 View 对象的 Context 对象,通常是当前正在展示的 Activity 对象。
  • Activity.getApplicationContext:获取当前 Activity 所在的(应用)进程的 Context 对象,通常我们使用 Context 对象时,要优先考虑这个全局的进程 Context 。
  • ContextWrapper.getBaseContext():用来获取一个 ContextWrapper 进行装饰之前的 Context ,可以使用这个方法,实际开发中使用并不多,也不建议使用。
  • Activity.this: 返回当前的 Activity 实例,如果是 UI 控件需要使用 Activity 作为 Context 对象,但是默认的 Toast 实际上使用 ApplicationContext 也可以。

getApplication() 和 getApplicationContext() 有什么区别和联系?
返回的都是 Application 对象,但是作用域不同。getApplication() 方法只有在 Activity 和 Service 中才能调用的到。如果在一些其它的场景,比如 BroadcastReceiver 中也想获得 Application 的实例,这时就可以借助 getApplicationContext() 方法了。

4. 正确使用Context

  • 当 Application 的 Context 能搞定的情况下,并且生命周期长的对象,优先使用 Application 的 Context。
  • 不要让生命周期长于 Activity 的对象持有到 Activity 的引用。
  • 尽量不要在 Activity 中使用非静态内部类,因为非静态内部类会隐式持有外部类实例的引用,如果使用静态内部类,将外部实例引用作为弱引用持有。

相关文章

网友评论

      本文标题:Context

      本文链接:https://www.haomeiwen.com/subject/ozfiultx.html