在我的应用程序中,我有一组数据 - Definition
(主要是Strings
,Enums
,以及动态的标记 - 即没有大的标记(即无法硬编码到服务操作中)定义IntentService
如何处理其输入。
我的基本问题是,每次Definition
传递给Intent
时,不是从XML文件加载这些Service
结构,而是希望将它们保存在内存中(由于服务被频繁调用,因此它们很小且快速访问是可取的)并且当Definition
接收它们时,使用坐在RAM中的Intents
来处理Service
。
逻辑上,我所能想到的只是一个永久性的背景Service
,有很多消息来源说这是一个坏主意(我同意)。
我想基本上我想要的是将这些数据存储在RAM中直到需要的方式(就像Android系统使用开放式应用程序,发射器等)并且不会对电池寿命产生任何不利影响(即Service
执行无,但在调用之前将数据保存在RAM中),但只要调用Service
,就可以使用它?
是否有任何可能的方法可以实现这一目标,或者是我必须非常谨慎地管理永久性Service
的唯一选择?
如果答案是永久Service
,那么IntentService
(配置为START_STICKY
)只会坐在内存中,并且在通过{{1}之前不会影响电池续航时间}?
答案 0 :(得分:1)
我的基本问题是,每次将Intent传递给服务时,不是从XML文件中加载这些定义结构,而是希望将它们保存在内存中(因为它们很小,因此需要快速访问)服务被经常调用)并使用位于RAM中的定义来处理Intents,因为服务接收它们。
首先,“经常被调用的服务”表明,根据您对“经常”的定义,您可能已经在CPU和电池利用率方面给用户造成了痛苦。相比之下,这种磁盘I / O的额外电池成本将是最小的。
除此之外,欢迎您在静态数据成员中保留此数据。只要您的流程在周围,它们就会存在。根据设备的运行情况,并根据您“经常”的定义,您可以在下次调用服务时使用这些数据。如果没有,您只需从磁盘重新加载。换句话说,使用静态数据成员作为缓存。
从逻辑上讲,我所能想到的只是一个永久性的背景服务,有很多消息来源说这是一个坏主意(我同意)。
具体来说,磁盘I / O的增量电池成本不值得一直占用用户的RAM。