Locator.geocode(...) 在 OS 5 设备(Blackberry Java)中冻结/阻止 UI

Posted

技术标签:

【中文标题】Locator.geocode(...) 在 OS 5 设备(Blackberry Java)中冻结/阻止 UI【英文标题】:Locator.geocode(...) freezes/blocks UI in OS 5 devices(Blackberry Java) 【发布时间】:2013-05-23 16:27:08 【问题描述】:

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

从调用Locator.geocode(...) 到完成,UI 被阻塞,用户无法与应用程序交互。

我猜这是 OS 5 的问题。有解决办法吗?


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

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

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

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

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

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

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

Locator.geocode(...) // UI 块在这一点(OS 5)直到这个 请求完成

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

来自Locator documentation:

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

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

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

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

【讨论】:

以上是关于Locator.geocode(...) 在 OS 5 设备(Blackberry Java)中冻结/阻止 UI的主要内容,如果未能解决你的问题,请参考以下文章

android.os.NetworkOnMainThreadException 在 android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(St

如何在 OS X 上安装 Rancher

如何在Mac OS X上安装 Ruby运行环境

如何在mac OS X下安装Mongodb

os

在 OS3.x 上运行时 iPhone OS4 功能链接错误