gpt4 book ai didi

android - 无法关闭 InputStreamReader

转载 作者:行者123 更新时间:2023-11-30 03:13:05 26 4
gpt4 key购买 nike

我在 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...为什么会发生这种情况,我应该怎么做?

最佳答案

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

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

关于android - 无法关闭 InputStreamReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20596759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com