Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:在不影响电池寿命的情况下将数据保存在RAM中_Java_Android_Android Service - Fatal编程技术网

Java Android:在不影响电池寿命的情况下将数据保存在RAM中

Java Android:在不影响电池寿命的情况下将数据保存在RAM中,java,android,android-service,Java,Android,Android Service,在我的应用程序中,我有一组数据-定义(主要是字符串,枚举,以及标志-即没有大的数据),这些数据动态地定义了IntentService如何处理其输入 我的基本问题是,与其每次将意图传递到服务时都从XML文件中加载这些定义结构,我希望将它们保存在内存中(因为它们很小,而且由于服务经常被调用,因此需要快速访问)当服务接收到意图时,使用RAM中的定义来处理它们 从逻辑上讲,我所能想到的只是一个永久性的背景服务,有很多消息来源说这是个坏主意(我同意) 我想本质上我正在寻找的是一种将这些数据存储在RAM中的

在我的应用程序中,我有一组数据-
定义
(主要是
字符串
枚举
,以及标志-即没有大的数据),这些数据动态地定义了
IntentService
如何处理其输入

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

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

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

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

如果永久性
服务
是答案,那么
意向服务
(配置为
启动_STICKY
)是否只需坐在RAM中,在通过
意向
之前不影响电池寿命

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

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

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

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


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

android中没有真正的永久后台服务。请记住,它首先是一部手机,因此,当手机铃声响起且内存不足时,包括前台服务在内的任何服务都可能被终止。这种设计是有意的,否则服务会占用所有内存,你的手机会变成一个智能砖块。好的一点,我想我只是在我的脑海中,永久性地缓存几kB的手机内存,以换取快速快速的响应,这似乎是一个值得权衡的选择。但我想如果所有的应用程序都这么做了,“自私”的方法在整体上是不适用的。谢谢@Commons的回答。我对“非常经常”的使用使它听起来比我想的更富有戏剧性。用户打开一个
快捷方式
,就会调用该服务,因此只有在用户明确请求时才会运行该服务。一个关键的要求是,我希望尽快完成此操作,因此需要缓存。根据你的回答,我认为一个
服务
,只要“安卓自然允许”和静态成员就可以使用,这听起来是最好的主意。@BT:“该服务由用户打开快捷方式调用,因此只有在用户明确请求时才运行”——这就更不用担心磁盘I/O了。“一个关键的要求是,我希望尽快完成这个操作——因此需要缓存”——当您运行性能测试时,为了确定磁盘I/O实际需要多长时间,您学到了什么?”一个只要“Android自然允许”和静态成员就可以挂起的服务听起来是最好的主意“--那就是你的
意向服务