首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >黑莓HTTPConnection最佳实践

黑莓HTTPConnection最佳实践
EN

Stack Overflow用户
提问于 2010-03-05 18:26:43
回答 2查看 1.3K关注 0票数 3

我正在为BB开发一个项目。该应用程序与网络一起工作,并通过HTTP发送/接收数据。现在我使用队列和队列管理器。管理器从后台线程开始,在while (true)循环中工作,检查队列中是否有新的事务发送到服务器。如果队列不为空,则执行事务,否则管理器将休眠200毫秒。

事务的处理过程如下:-运行另一个线程(使用Runnable),它打开一个到网络的连接,第一个线程等待我们设置的后台线程或超时(为此,我们需要一个循环)。-如果建立了连接,然后启动另一个线程(使用Runnable),它运行getResponseCode (),并启动第一个线程,等待我们设置的后台线程或超时(为此,我们需要一个循环)。

在它之前,我们显示了带有等待旋转图像的弹出窗口,在它被移除之后。它通过Application.getEventLock ()进行同步。

Iit有时不稳定,线程长时间休眠忽略超时等待循环。

我想知道这种方法有多有效,有什么建议和最佳实践,你的经验是什么?

我使用4.5、4.6、4.7和5.0。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-06 01:07:23

Application.getEventLock()返回的锁应该只用于修改UI或UI组件的代码-它是事件分派器使用的锁。您不应该将其用于后台任务,例如HTTP处理。如果您想同步这些代码,最好只创建您自己锁对象。

票数 2
EN

Stack Overflow用户

发布于 2013-09-16 13:31:03

您不需要那么多线程,您的EDT (事件分派线程,也称为主线程)应该将作业(某个可运行的类)插入到队列中,并使用等待/通知来通知负责网络事务的专用工作线程检查队列。工作线程将负责打开连接、写入连接和从连接读取。

有关等待/通知机制的信息,请查看:A simple scenario using wait() and notify() in java

由于您不能使用工作线程更新UI,因此一旦网络事务完成,您就可以使用InvokeLater更新UI层

有关更多详细信息,请访问http://www.blackberry.com/developers/docs/5.0.0api/net/rim/device/api/system/Application.html#invokeLater(java.lang.Runnable)

您可以在HTTPConnection本身中设置超时,但如果您不想依赖该机制,则可以调度一个TimerTask,它将在一段时间后执行,并在没有收到响应的情况下处理超时。收到响应后,您需要做的就是取消TimerTask,这样就不会触发超时。

查看http://www.blackberry.com/developers/docs/4.0api/java/util/TimerTask.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2385995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档