企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
![](https://markdown-1258186581.cos.ap-shanghai.myqcloud.com/20190516155536.png) ### 如何获取Context 通常我们想要获取`Context`对象,主要有以下四种方法: 1. `View.getContext`,返回当前`View`对象的`Context`对象,通常是当前正在展示的`Activity`对象。 2. `Activity.getApplicationContext`,获取当前`Activity`所在的(应用)进程的`Context`对象,通常我们使用`Context`对象时,要优先考虑这个全局的进程`Context`。 3. `ContextWrapper.getBaseContext()`:用来获取一个`ContextWrapper`进行装饰之前的`Context`,可以使用这个方法,这个方法在实际开发中使用并不多,也不建议使用。 4. `Activity.this` 返回当前的`Activity`实例,如果是UI控件需要使用`Activity`作为`Context`对象,但是默认的`Toast`实际上使用`ApplicationContext`也可以。 ### getApplication()和getApplicationContext() 因为` Application`继承于 `ContextWrap`,所以本质上也是一个` Context`, `getApplication()`和`getApplicationContext()` 返回的都是` Application`对象 ### 正确使用Context 一般`Context`造成的内存泄漏,几乎都是当`Context`销毁的时候,却因为被引用导致销毁失败,而`Application`的`Context`对象可以理解为随着进程存在的,所以我们总结出使用`Context`的正确姿势: 1. 当`Application`的`Context`能搞定的情况下,并且生命周期长的对象,优先使用`Application`的`Context`。 2. 不要让生命周期长于`Activity`的对象持有到`Activity`的引用。 3. 尽量不要在`Activity`中使用非静态内部类,因为非静态内部类会隐式持有外部类实例的引用,如果使用静态内部类,将外部实例引用作为弱引用持有。