Android之Application引用方式

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不同版本上可能会有差异。

猜你喜欢

转载自blog.csdn.net/zsf442553199/article/details/78675769