我在Android2.2手机上有一些奇怪的问题。
我打开套接字连接:
socket = new Socket(serverAddr, SERVERPORT);
messageWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), Charset.forName("UTF-8"))));
messageReader = new InputStreamReader(socket.getInputStream(), Charset.forName("UTF-8"));开始阅读AsyncTask doInBackground()中的内容:
protected Boolean doInBackground(final Void... unused) {
...
char[] chars = new char[256];
int len;
while((len = messageReader.read(chars))>=0) {
builder.append(chars, 0, len);
break;
}
result = true;
...
}阅读完后,我关闭连接:
try {
socket.close();
socket = null;
} catch (Exception e) {Log.e("socket", "ex");}
try {
messageWriter.close();
messageWriter = null;
} catch (Exception e) {Log.e("writer", "ex");}
try {
messageReader.close();
messageReader = null;
} catch (Exception e) {Log.e("reader", "ex");} 在Android2.3手机和Android4.0仿真器上,一切都很好,但出于某种原因,它无法在Android2.2手机上工作。套接字是关闭的,写入器是关闭的,但是读取器在调用“socket.close();.所以我的结束代码被卡在“messageReader.close()”上,整个UI被阻塞了!...and没有办法杀死AsyncTask.为什么会发生这种事,我该怎么办?
发布于 2013-12-15 22:23:35
首先,你不需要这三个关机。您只需要关闭输出流/写入器。
其次,关闭不能保证终止另一个线程中的阻塞操作。看看Javadoc。如果您有这种情况,则需要在关闭之前关闭输入套接字。然后,读取线程将得到一个EOS,在上面它应该退出。
https://stackoverflow.com/questions/20596759
复制相似问题