首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法关闭InputStreamReader

无法关闭InputStreamReader
EN

Stack Overflow用户
提问于 2013-12-15 16:23:28
回答 1查看 112关注 0票数 1

我在Android2.2手机上有一些奇怪的问题。

我打开套接字连接:

代码语言:javascript
复制
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()中的内容:

代码语言:javascript
复制
    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;
    ...
    }

阅读完后,我关闭连接:

代码语言:javascript
复制
                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.为什么会发生这种事,我该怎么办?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-15 22:23:35

首先,你不需要这三个关机。您只需要关闭输出流/写入器。

其次,关闭不能保证终止另一个线程中的阻塞操作。看看Javadoc。如果您有这种情况,则需要在关闭之前关闭输入套接字。然后,读取线程将得到一个EOS,在上面它应该退出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20596759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档