Android:将数据保存在RAM中而不会影响电池寿命

时间:2014-02-24 05:40:11

标签: java android android-service

在我的应用程序中,我有一组数据 - Definition(主要是StringsEnums,以及动态的标记 - 即没有大的标记(即无法硬编码到服务操作中)定义IntentService如何处理其输入。

我的基本问题是,每次Definition传递给Intent时,不是从XML文件加载这些Service结构,而是希望将它们保存在内存中(由于服务被频繁调用,因此它们很小且快速访问是可取的)并且当Definition接收它们时,使用坐在RAM中的Intents来处理Service

逻辑上,我所能想到的只是一个永久性的背景Service,有很多消息来源说这是一个坏主意(我同意)。

我想基本上我想要的是将这些数据存储在RAM中直到需要的方式(就像Android系统使用开放式应用程序,发射器等)并且不会对电池寿命产生任何不利影响(即Service执行,但在调用之前将数据保存在RAM中),但只要调用Service,就可以使用它?

是否有任何可能的方法可以实现这一目标,或者是我必须非常谨慎地管理永久性Service的唯一选择?

如果答案是永久Service,那么IntentService(配置为START_STICKY)只会坐在内存中,并且在通过{{1}之前不会影响电池续航时间}?

1 个答案:

答案 0 :(得分:1)

  

我的基本问题是,每次将Intent传递给服务时,不是从XML文件中加载这些定义结构,而是希望将它们保存在内存中(因为它们很小,因此需要快速访问)服务被经常调用)并使用位于RAM中的定义来处理Intents,因为服务接收它们。

首先,“经常被调用的服务”表明,根据您对“经常”的定义,您可能已经在CPU和电池利用率方面给用户造成了痛苦。相比之下,这种磁盘I / O的额外电池成本将是最小的。

除此之外,欢迎您在静态数据成员中保留此数据。只要您的流程在周围,它们就会存在。根据设备的运行情况,并根据您“经常”的定义,您可以在下次调用服务时使用这些数据。如果没有,您只需从磁盘重新加载。换句话说,使用静态数据成员作为缓存。

  

从逻辑上讲,我所能想到的只是一个永久性的背景服务,有很多消息来源说这是一个坏主意(我同意)。

具体来说,磁盘I / O的增量电池成本不值得一直占用用户的RAM。