我正在尝试编写一个MIDP应用程序,它正在进行大量的网络连接。这一切都是通过HttpURLConnection完成的(这是这个平台所支持的,套接字不起作用)。造成问题的主要部分是代码通过一组HTTP连接来隧道InputStream和OutputStream,这样每个读和写都会变成一个单独的POST请求。
我发现,虽然在MIDP中进行联网并不是太糟糕,但是在MIDP中停止进行网络连接是一场噩梦。我发现我最终得到了很多线程,所有这些线程都在read()或write()上被阻塞,而找到它们并杀死它们真的很困难。Thread.interrupt()不能在Java的InputStream.read()和OutputStream.write()中工作,在流上调用close()并不总是可能的,因为流可能隐藏在URLConnection中,而URLConnection本身也无法告诉它关闭连接。
我的平台对清理工作过于挑剔,这一点也没有帮助。例如,如果我在应用程序退出时保持线程运行,系统将重新启动。我怀疑它在与主设备UI相同的VM中运行我的中间版。
所以:有人能提出一个合适的结构,我应该采取,使这类事情更容易吗?因为现在它正在变成一个由线程、捕捉块、中断和IOExceptions组成的分形迷宫,我和我正在迅速地忘记它应该如何工作。
或者,一个好的事件驱动IO库包装URLConnection将是方便的。唉,这是MIDP,所以nio或频道之类的都不是一个选择。
编辑:更新:事实证明,它毕竟不是MIDP,而是PB1.1。啊,文件不足的乐趣。尽管如此,他们并没有太大的不同,供应商告诉我们,唯一的网络系统工作是HttpURLConnection。
发布于 2011-04-03 22:50:41
您将经历不同的网络问题,不仅在不同的手机,而且在不同的配置和运营商,固件,网络和网络条件。
也就是说,您可以使用套接字实现HTTP客户端--您的假设在所有最老的手机上都不是正确的。此外,您还应该查看Connection.close()方法。我目前正在使用以下close方法,该方法简单但有效:
public void close() {
if (inputStream != null) {
try {
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
inputStream = null;
}
}
if (outputStream != null) {
try {
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
outputStream = null;
}
}
if (connection != null) {
try {
connection.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
connection = null;
}
}
closed = true;
}如果这不管用,你就完蛋了。换句话说,你不应该假设你能让你的MIDP在所有的MIDP手机上完美地工作--因为你不会。为了更大的图景而设计,不要花时间去调试有着无可救药的缺陷的MIDP实现。
你可能想要同步。
https://stackoverflow.com/questions/5532960
复制相似问题