Android Can';t关闭输入流读取器

Android Can';t关闭输入流读取器,android,sockets,android-asynctask,inputstreamreader,Android,Sockets,Android Asynctask,Inputstreamreader,我在安卓2.2手机上遇到了一些奇怪的问题 我打开插座连接: socket = new Socket(serverAddr, SERVERPORT); messageWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), Charset.forName("UTF-8")))); messageReader = new InputStreamReader(socket.g

我在安卓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"));
                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");}  
在AsyncTask doInBackground()中开始读取:

阅读后,我关闭连接:

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"));
                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");}  
在安卓2.3手机和安卓4.0模拟器上一切正常,但由于某些原因,它在安卓2.2手机上不起作用。
套接字已关闭,写入程序已关闭,但读卡器卡在while循环中,即使它在调用“socket.close();”时应该停止循环。。。所以我的结束代码被卡在了“messageReader.close();”上,整个UI都被阻塞了。。。而且没有办法杀死AsyncTask。。。为什么会发生这种情况?我该怎么办?

首先,您不需要这三次关闭。您只需要关闭输出流/写入程序


其次,关闭不能保证终止另一个线程中的阻塞操作。请参阅Javadoc。如果您有这样的问题,您需要在关闭前关闭套接字以进行输入。然后,阅读线程将获得一个EOS,它应该在该EOS上退出。

@EJP您能为您的声明提供参考吗?Javadoc的说法正好相反:“当前在该套接字上的I/O操作中阻塞的任何线程都将抛出SocketException。”