【问题标题】:Android: Will storing sensors/GPS data frequently degrade battery?Android:存储传感器/GPS 数据是否会频繁降低电池电量?
【发布时间】:2023-04-06 15:54:01
【问题描述】:

我目前正在编写一个需要执行以下操作的 Android 应用:

  • 检索传感器数据,例如 ActivityRecognition 数据,每 20-30 秒说一次
  • 不时检索 GPS 数据(例如,当活动识别发送该用户正在使用其自行车或汽车时),因此对于普通用户,我会说每天最多几次。例如,GPS 数据检索频率可以是每 5-10 秒一次。

当然,这些数据应该存储在某个地方,以便稍后由我的应用程序分析。分析部分不是这里的问题,因为我不需要任何类型的实时计算,所以我真正关心的是如何有效地存储数据

因此,如果我们考虑一个普通用户将生成大约 5000 个传感器数据 + 5000 个 GPS 数据:

  • 如何最好地存储这些数据?数据库?每天 1 个文件 ?我会说数据库的性能问题和使用简单,但我不确定每 10/20 秒打开/关闭一个数据库连接以添加一行数据是否是一个很好的做法。此外,一个日志文件(每天一个)可能是一个好主意,但我认为这对于性能的观点来说是非常糟糕的,即使使用序列化?
  • 存储这 10000 个数据是否会降低电池寿命,而不仅仅是在不存储的情况下检索传感器(ActivityRecognition、GPS)数据?我的意思是,在我看来它会有点过度消耗,但同时 GPS 已经消耗了很多电池......
  • 是否有其他方法可以做到这一点?

还考虑过内存存储,然后每隔几分钟就可以将其放入硬盘存储(SQLite、文件),但我不确定这是否是安全保存数据的好主意...

提前致谢

【问题讨论】:

  • 传感器数据,没有。 GPS会耗尽一些手机的电量,但仅限于打开时。 AFAIK 只是阅读它并不会耗尽电池;它是打开的。如果你需要数据,你就需要数据。

标签: android performance gps android-sensors battery


【解决方案1】:

相对于GPS的电池消耗,在数据库中的读写几乎没有消耗(毕竟是闪存),所以不用担心。在我看来,数据库是存储这些数据的最佳选择,我认为每 10 或 20 秒创建一个条目没有问题。

【讨论】:

  • 我会支持数据库方法,如果您愿意,您可以减少写入数据库的频率,直到达到本地内存限制,这样您就不会频繁打开和关闭数据库。但你已经提出了这个建议。
【解决方案2】:

还想到了内存存储,然后每隔几分钟就可以了 放入硬盘存储(SQLite,文件),但我不确定这是一个好的 安全保存数据方面的想法...

这是一个非常好的主意。 我已经这样做了,大多数处理文件的系统都是这样做的(称为缓冲区)。

如果您的应用因错误而崩溃,一些数据将会丢失,具体取决于缓冲区大小。 在所有其他情况下(设备将关闭,用户终止应用程序)您有时间写入(刷新)缓冲区。

【讨论】:

  • 感谢您的回答,但您的回答让我想到了几个问题: 1. 您建议多久将数据从内存缓冲区传输到数据库?应该每 X 分钟完成一次,还是当我们达到列表大小限制时?也许两者兼而有之?在我看来,为了避免数据内存丢失,当满足两个条件(时间或列表大小)中的任何一个时,我应该将此数据保存到数据库中,对吗? 2.有趣的是,我仍然可以在“正常”退出期间保存内存数据,但在这里我认为我不能花太多时间在 onPause 或等效方法中保存数据,它应该运行得很快......
  • 如果在单个事务中运行,保存少量数据不会花费很长时间。此外,您可以使用 AsyncTask 将数据保存在 onPause() 中,因此保存不会阻塞生命周期方法。
  • 是的,这是个好主意,我将测试保存到数据库的执行速度是否足够快,可以直接在 onPause 中完成(可能是......)否则我将在 AsyncTask 中执行.非常感谢。
  • @Pom12 1) 我使用了列表大小限制的方法,因为它是一个缓冲区,并且缓冲区有大小。缓冲区大小可以等于 30 秒到 5 分钟。 (频率 1 位置 /s 的 30 -300 位置)
【解决方案3】:

只是一个简短的附加说明。

除了关闭外围设备(在您的情况下不是一个真正的选择)之外,最大限度地延长处理器处于非活动状态的时间长度。 (这与最小化进程处于活动状态的时间长度不同。)这允许处理器进入较低的睡眠状态(称为 C 状态)。睡眠状态越深,省电越多。

在一般意义上,这意味着

  1. 没有轮询;改用中断,
  2. 如果您需要定期唤醒以查看是否有任何需要 完成后,请确保您的中断周期是允许的最大值。 (与目前的做法相反,每 10 毫秒唤醒一次并不 当平均事件每 500 次发生时提高您的响应能力 女士)

这也适用于外围设备,因为它们在不活动时也会进入睡眠状态(称为 D 状态)。

  1. 尽量减少您访问云的次数。
  2. 最大化云访问之间的时间长度。

【讨论】:

  • 我刚刚回答了另一个问题,它提供了有关您问题的更多信息。见stackoverflow.com/questions/24207590/…
  • 感谢您的补充说明。值得一提的是,我不需要任何互联网连接即可与 GPS 一起运行,因此云访问并不是这里真正的主题。问题是:如果要在同一时间段内使用像 GPS 这样的外围设备,它是否应该保持活动状态,而不是进行一些可能比保持状态消耗更多的进入睡眠/唤醒周期醒了 ?我的意思是,我认为搜索天线(用于 GPS)非常耗时且耗电,所以我宁愿保持它处于活动状态,除非我真的很长时间不需要它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
相关资源
最近更新 更多