Android线程 - 自定义Googlemaps平铺叠加

时间:2010-11-04 00:39:14

标签: android google-maps

我已经卡住了很多年,现在试图为我一直在研究的自定义图块叠加类实现线程加载或背景图像加载。在Java方面我很无用,因此线程不是我有过的经验。

基本上我已经扩展了一个ItemizedOverlay,并且在draw()方法中计算我需要在标准谷歌图块上显示的图块,然后使用URLConnection获取这些图像并使用BitmapFactory解码它们并将它们绘制到画布上的正确位置在屏幕上,使图像位于Google瓷砖顶部,不透明度约为50%(自定义瓷砖是用于我们网络应用的手机网络覆盖范围)

我最初得到的所有这些都是在正确的位置加载了瓷砖,但在平移时遇到了内存问题和“冻结”,因此实现了一些基本的缓存和内存管理,只存储地图上显示的内存中的图块和下载瓷砖时将其存储到SD卡。

然后我认为平移时的冻结是由于下载图像的阻塞性质所以,一直试图实现线程化。我创建了一个扩展AsyncTask的类,在后台下载图像并将它们存储到SD中,在onPostExecute方法中我尝试绘制所有的tile。

但onPostExecute似乎永远不会触发,现在我知道必须在主ui线程中调用AsyncTask,因此尝试使用Thread.currentThread()调试执行.getId()通过代码调用。对于AsyncTask的doInBackground方法,线程Ids out out为1然后为10。现在我不确定1是否是主UI线程。在我扩展的MapActivity类中,onCreate方法的Thread.currentThread()。getId()返回1,但我不确定MapActivity类是否在主ui线程中执行?

Here Romain Guy提到onPostExecute方法应该有@Override但是当我这样做时,eclipse将其标记为错误

"The method onPostExecute(Boolean...) of type TileCache.ImageLoadTask must override or implement a supertype method"

所以我觉得有些问题,但是eclipse提供的唯一解决办法是删除@Override 所以我想在发布我的所有源代码时,我的问题是:

  1. 是否在主ui线程中调用了MapActivity onCreate方法?
  2. @Override错误是什么意思?或者为什么会显示错误
  3. 有没有人有自定义图块叠加实现的示例,其背景图片加载和图块缓存?
  4. 由于

1 个答案:

答案 0 :(得分:1)

前两个问题的答案:

  1. 是。实际上,除非指定,否则Activity类中的所有函数都在UI Thread中调用。
  2. 您的@Override错误似乎......您的ImageLoadTask不是AsyncTask的扩展。