2

我正在做一个应用程序,我需要检测用户是否在 MapView 上选择陆地或海上的经度/纬度对。我可以通过向 Google 地图服务发送请求来回答这个问题,但我希望它也可以离线工作。所以我想出了两种可以发挥作用的方法,而且由于我在位图与内存区域上相当绿色,我想我会得到你的意见。

主要思想是我正在存储我想要覆盖的地图区域的一个小的黑白位图(比如 200x200 像素)。当用户选择经度/纬度对时,该对将转换为一组 x,y 像素,我检查像素坐标是指向黑色像素(陆地)还是白色像素(海/水)。到目前为止,这是我提出的两种方法。

选项 A

当用户即将选择长/纬度对时延迟加载位图并用于getPixel()检查它是在陆地还是海上。保持对图像的弱引用,让它在 GC 出现时被垃圾收集。

选项 B

将位图的每个像素坐标对保存在 SQLite 数据库中,并在用户每次要选择长/纬度对时进行查找。

我猜A在速度方面是最好的(首先忽略从磁盘读取位图的开销),但是在电池方面将位图保存在内存中是否成本高昂?

如果您对如何执行此操作有任何其他建议,那么我很乐意在这里:)

4

1 回答 1

1

正如您所说,选项 A 是最快的,但我很困惑为什么您认为使用位图会影响电池。

手机中的所有内存始终包含 1 或 0。1 和 0 之间的功率差异非常小(我的意思是很小),但我们可以假设内存有数百兆字节或千兆位1 和 0 的随机 50/50 分布。加载位图的内存在加载之前是 1 和 0,在加载之后是 1 和 0。我怀疑,在没有测量的情况下,从内存加载位图的影响(因为这确实使用了电源,而不是简单地保持加载)远小于 SQL 方法将使用的等效内存读取数量。

因此,我的结论是保持位图加载对电池没有影响,首选选项 A。

[编辑] 对您的问题进行了更多思考后,您实际上是在问“哪个使用更多功率”,从加载的位图中读取像素还是查询 SQLite 表?

于 2012-10-14T16:05:45.633 回答