2

在我的 BlackBerry 应用程序中,Locator.geocode(...)请求位于 a 中Thread,但它仍会阻止 OS 5 设备中的 UI。在 OS 6 和 7 设备中它工作正常。UI 未被阻止。

Locator.geocode(...)调用的那一刻到完成,UI 被阻止并且用户无法与应用程序交互。

我想这是 OS 5 的问题。有解决方案吗?


更新:首先,感谢您的快速回复。

  1. 我替换Locator.geocode(...)了 call for Thread.sleep(...)。UI 变慢但没有被阻塞。我用的模拟器是9300。

  2. Locator.geocode(...)请求在一个try..catch()块内,它不会引发异常。调用完成后它返回null(我正在使用模拟器)但没有抛出异常。

供您参考,这是控制台打印的内容:(使用 9300 模拟器)

** * *创建 Geocode 类之前的线程数:4

** * *在调用 Locator.geocode 之前 Geocode 类中的线程数:5

** * *在事件线程上运行:false

Locator.geocode(...) // 此时 UI 阻塞(OS 5),直到此请求完成

4

2 回答 2

2

你确定你让它在一个线程上正确运行吗?可能是 OS 6+ 响应更快,所以您只注意到 OS 5 上的问题。尝试将调用替换为调用以Locator.geocode()确保Thread.sleep(60000)后台线程正常工作。

于 2013-05-23T19:22:19.207 回答
1

Locator文档中:

*对地理编码信息的请求是同步的,但可以通过调用 cancel() 来中断。应用程序一次只能使用 Locator 类发出一个请求。发出多个请求会导致 MapServiceException。*

所以这是检查你的代码的一件事。确保您没有提出多个请求。另一个可能的问题:

如果 BlackBerry 设备上未安装 LBS 地图 API,则对地理编码信息的请求将引发 MapServiceException。

在这两种情况下,线程中抛出的异常都会终止该线程,但这不会影响其他线程,如事件线程。因此,如果不阅读代码,我会说您的问题与定位器无关。如果您粘贴一些代码或异常跟踪,这将非常有帮助。

于 2013-05-24T08:51:39.397 回答