我正在做一个应用程序,我需要检测用户是否在MapView上选择陆地或海上的经度/纬度对。我可以通过向Google地图服务发送请求来解决这个问题,但我更倾向于离线工作。所以我提出了两种可以起作用的方法,因为我在Bitmap与内存区域相当绿,我以为我会得到你的输入。
主要思想是我要存储我想要覆盖的地图区域的小黑白位图(例如200x200像素)。当用户选择经度/纬度对时,则该对被转换为一组x,y像素,并检查像素坐标是指向黑色像素(平面)还是白色像素(海洋/水)。这是我到目前为止提出的两种方法。
选项A
当用户即将选择长/纬线对并使用getPixel()
检查它是在陆地还是海上时,延迟加载位图。保持对图像的WeakReference,让它在GC到来时被垃圾收集。
选项B
将位图的每个像素坐标对保留在SQLite数据库中,并在每次用户即将选择长/纬度对时进行查找。
我猜测 A 是速度最快的(忽略了从磁盘读取位图的开销),但将位图保留在内存中代价高昂电池方式?
如果您对如何做到这一点有任何其他建议,那么我很乐意在这里:)
答案 0 :(得分:1)
正如你所说,选项A是最快的,但我很困惑为什么你认为使用位图会影响电池。
手机中的所有内存总是保持1或0.在1和0之间的功率(我的意思是小)之间存在非常小的差异,但是在数百兆字节或数字内存中,我们可以假设随机50/50分布为1和0。加载位图的内存在加载之前充满了1和0,加载后充满了1和0。我怀疑,没有测量,从内存加载位图的影响(因为这确实使用功率而不是简单地保持它加载)远远小于SQL方法将使用的等效内存读取数。
因此,我的结论是保持位图加载对电池没有影响,选项A是首选。
[编辑] 在考虑了一些关于你的问题之后,你实际上是在问“哪个使用更多功能”,从加载的位图读取像素或查询SQLite表“?