gpt4 book ai didi

Android 线程 - 自定义 Googlemaps 图 block 叠加

转载 作者:行者123 更新时间:2023-11-30 04:48:53 25 4
gpt4 key购买 nike

多年来,我一直在尝试为我一直在研究的自定义图 block 叠加类实现线程或背景图像加载。我在 Java 方面一无是处,所以我对线程没有任何经验。

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

我最初在正确的位置加载了图 block ,但在平移时遇到了内存和“卡住”问题,因此实现了一些基本的缓存和内存管理,只将 map 上显示的图 block 存储在内存中,下载图 block 时将其存储到 SD 卡中。

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

但是 onPostExecute 似乎永远不会触发,现在我知道必须在主 ui 线程中调用 AsyncTask,因此尝试通过代码调用 Thread.currentThread().getId() 来调试执行。对于 AsyncTask 的 doInBackground 方法,线程 ID 一直是 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. MapActivity的onCreate方法是否在ui主线程调用?
  2. @Override 错误是什么意思?或者为什么会显示错误
  3. 有没有人有使用背景图像加载和图 block 缓存实现自定义图 block 叠加层的示例?

谢谢

最佳答案

前两个问题的答案:

  1. 是的。事实上,除非特别说明,Activity 类中的所有函数都在 UI Thread 中调用。
  2. 您的@Override 错误似乎...您的ImageLoadTask 不是AsyncTask 的扩展。

关于Android 线程 - 自定义 Googlemaps 图 block 叠加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4092971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com