我在 Android 2.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");}
在 Android 2.3 手机和 Android 4.0 模拟器上一切正常,但由于某种原因,它不适用于 Android 2.2 手机。套接字已关闭,编写器已关闭,但读取器卡在 while 循环中,即使在调用“socket.close();”时它应该制动循环......所以我的关闭代码卡在“messageReader.close( );" 整个用户界面都被阻止了!...并且没有办法杀死 AsyncTask ...为什么会发生这种情况,我该怎么办?