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