6.3.2 利用应用环境对象共享数据的优缺点
基于应用环境的全局数据共享,可以解决多组件间数据共享的问题,相比基于文件系统的实现,它有几个优点。
❑效率更高
使用全局的应用环境对象,可以有效地降低数据读取和写入的次数,并且可以基于全局的操作情况来优化数据读写的实现,从而极大地提升了效率。
比如,一份只读数据通过全局环境对象来保存,仅需要在进程构造之初读取一次。而在整个进程生命周期中,相关组件对象可能N次地被构造出来,如果通过文件共享的方式实现,这份数据就需要N次地被读取出来。
❑可实现不需要持久化存储的数据共享
在应用中,很多数据都是没有持久化需求的(即不需要写入到外存储设备中),比如临时从网络上读取的数据、通过计算得到的结果等。如果基于文件来实现,可谓“吃力不讨好”,而基于应用环境对象来实现,则是“顺理成章”。
但基于应用环境的数据共享依然有它的局限性。
❑不支持跨进程、跨应用的数据共享
基于内存的数据,都有其寄宿的进程空间。在应用环境中存储的数据,无法进行跨进程访问,也就不能作为不同进程中组件共享和数据传输的载体。
如果一个应用有多个进程,这个问题便更为突出。此时,不能使用应用环境对象存储可写数据,否则可能会造成数据不一致的状况。
❑可能占用更多的内存空间
应用环境对象的生命周期跨越了整个进程周期,因此,存放在其中的数据会一直占据着应用进程的内存空间。在实现中,如果需要共享的数据规模较大,需要对数据的读取和写入进行优化,以降低内存开销。
比如,如果在应用环境对象中放置了一个图像数据缓存(图像数据占用的内存空间通常较多),就需要时刻注意缓存数据的大小,及时释放过期的图像数据,否则,会导致整个应用进程内存溢出。
简而言之,应用环境对象为组件提供了全局的共享内存区域,组件对象可以通过它来存取全局数据。只是在实现中,需要特别关注数据的读取和写入优化,以保证数据访问的安全性和高效性。
在实际开发中,利用应用环境来共享全局数据被广泛地应用。比如,Android原生的联系人应用,会将缓存在内存中的联系人头像图片都放在应用环境对象中,便于不同的界面组件使用,并有效地节约内存;而在Android原生的短信应用中,则会将地区设置这样的变量放在应用环境中,虽然数据量不大,但是在被反复读取的前提下,可以有效地提升效率。