Android开发时,Application一般都放在APP中,Lib模块如果想引用Application则需要在APP中进行传递,然后在Lib模块中用静态变量进行保存。然而这种方法不应该是Android推荐的,从Android Studio提示【Do not place Android context classes in static fields; this is a memory leak】可以看出。静态变量在开发中不是万能,特别是一切场景下静态变量可能被回收导致程序崩溃,所以有许多人努力将这些数据做序列化/反序列化操作,目的很简单,就是让静态变量不会为空。

我们换一种思路想下这个问题,其实我们的Lib模块只是想得到Application,不一定非要自己来保存,只要能引用到就行,那么这样问题就变得简单许多了。

下面介绍两种方法实现上述功能:

1、基础库+Application基类


从上图可以看出,我们的APP模块架构引入了一个【基础库】,这个基础库做了许多事情,其中一个就是Application的基类,所有的模块都会provided基础库,那么所有模块都可以引用基础库中的Application基类了。App的Application继承基础库中的Application即可,这么简单就能实现Appliction的全局引用。

2、采用反射获取Application


代码很简单,通过反射获取ActivityThread类中的Application变量,够机智的。

调用方法:OkApplication.get()

以上两种方法,在条件允许的情况下推荐采用第一种,第二种反射在Android不同版本上可能会有差异。

更多相关文章

  1. Android(安卓)基础知识介绍
  2. android开发环境
  3. Android(安卓)单元测试(四) 之AndroidJUnitRunner基础
  4. 使用Android(安卓)Studio搭建Android集成开发环境
  5. 图文详解Android(安卓)Studio搭建Android集成开发环境的过程
  6. 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程
  7. 浅析android系统设计中的回调思想
  8. 分享自学Java,Web,Android视频教程资源(自学Android,有这些就够了)
  9. 箭头函数的基础使用

随机推荐

  1. Android静态安全检测 -> 证书弱校验
  2. Android 实现图片加水印
  3. Android 运行ndk-build遇到的坑
  4. Widget分区域点击
  5. Android: VideoView做背景仿常见APP登录
  6. 加载大Bitmap处理资料集锦
  7. Android 程序崩溃自动生成Crash文件
  8. android封装的menu自定义菜单列表
  9. android添加图片到本地,无法即使刷新的解
  10. Android(安卓)Interface Definition Lang