代码之家  ›  专栏  ›  技术社区  ›  btalb

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

  •  1
  • btalb  · 技术社区  · 11 年前

    在我的应用程序中,我有一组数据- Definition (大部分 Strings , Enums ,以及标志(即,没有大的) 动态地,动态地 (即不能硬编码到服务操作中)定义 IntentService 是处理其输入。

    我的基本问题是,与其加载这些 释义 每次 Intent 传递给 Service ,我希望将它们保存在内存中(因为它们很小,而且由于服务经常被调用,所以需要快速访问),并使用 释义 s坐在RAM中进行处理 Intents 作为 服务 接收它们。

    从逻辑上讲,我所能想到的只是一个永久的背景 服务 对此,有大量消息来源表示这是一个坏主意(我同意)。

    我想,本质上,我正在寻找的是一种将这些数据存储在RAM中的方法,直到它被需要(就像Android系统使用开放应用程序、启动器等),并且不会对电池寿命产生任何不利影响(即 服务 没有什么 但将数据保存在RAM中直到调用),但只要我 服务 被调用?

    是否有任何可能的方法可以实现这一点,或者这是唯一的永久选择 服务 我必须非常小心地管理?

    如果永久性 服务 是答案吗 Intent服务 (配置为 START_STICKY )只要坐在RAM中,不影响电池寿命,直到通过 意图 ?

    1 回复  |  直到 11 年前
        1
  •  2
  •   CommonsWare    11 年前

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

    首先,“经常调用的服务”表明,在CPU和电池利用率方面,您可能已经给用户带来了痛苦,这取决于您对“经常调用”的定义。相比之下,此磁盘I/O的额外电池成本将降至最低。

    除此之外,欢迎您在静态数据成员中保留此数据。只要你的过程还在,他们就会一直存在。根据设备发生的情况以及您对“非常频繁”的定义,这些数据可能会在下次调用服务时提供给您。如果没有,您只需从磁盘重新加载。换句话说,将静态数据成员用作缓存。

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

    特别是,磁盘I/O的电池成本增加不值得一直占用用户的RAM。