为什么J2ME Midlet套件和HTTPConnection需要在不同的线程中
-
11-12-2019 - |
题
我想从J2ME midlet调用一个Servlet,所以我已经编写了Servlet URL的HTTPConnection代码来调用GET方法。
当Midlet套件尝试连接到Servlet URL时,我在模拟器中得到了以下消息,
{#MyMidlet} Midlet Suite wants to connect to {#Servlet URL} using air time,
this may result in charges, Is it ok to use airtime ?
如果我点击No或Yes,什么都没有发生,它只是被绞死了,我正在使用EclipseME和SUN WTK2.5.2。在控制台有一个警告,
Warning: To avoid potential deadlock, operations that may block, such as
networking, should be performed in a different thread than the
commandAction() handler.
这意味着,如果我确实在一个单独的线程中制作HttpConnection,问题会得到解决吗?
解决方案
如果我确实在单独的线程中制作HttpConnection,问题会得到解决吗?
如果你做得对-是的,问题就会解决。这是一个典型的问题,有standatd解决方案。
您引用的警告表示midlet中的设计问题。你有"重量级"活动(http连接)在与UI相同的线程中运行,阻止它并使其不负责任。
避免UI事件线程的重载。当有很多事情要做的时候 commandAction
或 keyPressed
或 pointerPressed
等,只是产生一个新的线程来做到这一点。为了更好地理解这是为什么,请考虑学习本教程以了解如何正确地做到这一点:
本文介绍MIDlet如何在不影响用户界面的情况下建立网络连接。它包括六个迭代示例,说明多线程网络和等待屏幕的使用。..
- 在教程中的第一个例子之后(
PrimitiveMidlet
),甚至还有你遇到的问题的详细解释:...程序员劫持了一个系统线程来进行他自己的冗长处理。当用户选择命令时,系统调用他的commandAction()方法。调用此方法的线程属于系统,而不是开发人员。如果该方法快速执行,这不会是犯罪,但在这种情况下,网络连接可能会占用系统的线程很长一段时间。
在J2SE应用程序编程中,甚至在servlet编程中,系统会为您创建一个线程,并且对您的处理可能需要多长时间的限制很少。MIDlet线程的规则简单而严格:属于您的唯一线程是您自己创建的线程。
在MIDlet中,您正在编写系统将从其自己的线程之一调用的代码。例如,当调用MIDlet的startApp()、pauseApp()、destroyApp()和事件处理程序方法时,它们在系统线程内运行。您的方法必须快速返回,以便系统线程可以继续其其他工作。任何不能快速完成的任务都必须移出系统的线程。
这种编程风格可能需要一些时间来适应,因为您实际上只是编写从系统线程调用的代码。但是,如果您已经完成了任何其他GUI编程,这种技术将是熟悉的。AWT和Swing有一个事件调度线程,它处理操作系统事件并在代码中调用事件处理程序。规则是一样的:事件处理程序应该快速执行并将控制权返回给事件调度线程,以便接口的其余部分不会锁定。..
其他提示
将其连接作为如下单独的线程:
Thread myConnection = new Thread(new Runnable() {
public void run() {
// TODO open connection here
HttpConnection conn = null;
try {
conn = (HttpConnection) Connector.open(serverURL,
Connector.READ_WRITE, true);
conn.setRequestMethod(HttpConnection.GET); // or POST method
} catch (Exception e) {
// TODO: handle exception
} finally {
// close connection here
}
}
});
myConnection.start();
.
在J2ME中,网络操作被放入单独的线程中。
.
Warning: To avoid potential deadlock, operations that may block, such as
networking, should be performed in a different thread than the
commandAction() handler.
在J2ME(是J2ME的所有者的Sun / Oracle)提供了一些限制。对于安全性,一些API需要可信任的方证书。如果某些手机询问用户单击“是”允许用户,请允许用户点击是的,否则它不会允许。
以下是某些API所在的情况下是FileConnection(读/写入文件)API,HTTPConnection,HTTPSConection等。
检查您的设备是否支持自签名证书。如果支持意味着您使用自签名证书。
值得信赖的派对证书昂贵。每年最低成本是Ruppees 10000。以下是一些可信党供应商Thawte,Verizon,Semantec等等