请问如何停止socket通信进程? 本帖最后由 u011808175 于 2014-03-01 20:44:15 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 阻塞的也没关系,当程序调用了onDestroy 时,设置一个标志位 hasStop= true;String ans = in.readLine();if (hasStop) {} String ans = in.readLine();//这个地方应该会有超时异常if (hasStop) { //程序直接break; break;}Thread t = new Thread(runnable);t.stop();//执行这个方法,打断线程。 请详细说一下那个超时异常………… 程序不是在那一句就停住了么? 为什么还能执行到if(hasStop)那一句? 笨方法,你设置个判断,接收到byebye就关闭socket 问题是程序不会一直卡在String ans = in.readLine();这一句么?哪有机会去判断退出条件?class GetThread implements Runnable { boolean end; GetThread() { super(); end=false; } @Override public void run() { socket = the_app.socket; while(!end) { if(end) break; try { BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String ans = in.readLine();//当启动这个线程的Activity退出的时候,线程会在这一句阻塞住,没有机会去判断退出条件 if(ans != null) { Message msg = new Message(); msg.obj = ans; AskInputActivity.this.handler.sendMessage(msg); } } catch (IOException e) { Message msg = new Message(); msg.obj = "net error"; AskInputActivity.this.handler.sendMessage(msg); break; } catch (NullPointerException e) { Message msg = new Message(); msg.obj = "net error"; AskInputActivity.this.handler.sendMessage(msg); break; } } } public void stop() { end = true; } } socket.close.另外一个。你建立线程的对象的。close也可以。 这个socket是全局的,这个程序的所有activity都需要这个socket的连接,除了在退出的时候close,然后每个activity启动的时候连一下之外有什么更好的解决方法么?主要是如果这个线程不停止,在别的activity里面请求服务器发送消息的时候,这个线程就会得到另一个activity所请求的信息然后报错,另一个activity就收不到该收到的信息了,所以想在退出activity的时候退出线程。听说线程可以用interrupt强制打断? 也许没有什么好的办法吧,最后干脆回避掉这问题,尽量不让APP一直等待服务器输入就好了。对于询问-回答类的线程,一个线程只完成一次询问-回答就结束,下一个询问再开新的;其他的话,其实觉得还是应该把网络通信线程放在service里比较科学…… 在Robotium中使用ID android4.0下, 如何弹出关机 对话框? 如何将摄像头的UVC驱动程序安装到平板电脑上,类似于三星 note10 请教:NDK环境,动态调用SO库的问题 请教:Android播放RTSP的错误Error(100,0) 吐血请教为什么admob显示不了啊 程序没错但是不能运行!!!急救 想搞个android WIFI的语音聊天,各位能不能给点思路跟建议 定义layout,一个按钮在另一个按钮旁边,哪错了 Droid-Stock 炒股软件 帮忙解析个简单的json数据 百度地图 站点查询
if (hasStop) {}
if (hasStop) {
//程序直接break;
break;
}
Thread t = new Thread(runnable);
t.stop();//执行这个方法,打断线程。
请详细说一下那个超时异常………… 程序不是在那一句就停住了么? 为什么还能执行到if(hasStop)那一句?
class GetThread implements Runnable
{
boolean end;
GetThread()
{
super();
end=false;
}
@Override
public void run()
{
socket = the_app.socket;
while(!end)
{
if(end)
break;
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String ans = in.readLine();//当启动这个线程的Activity退出的时候,线程会在这一句阻塞住,没有机会去判断退出条件
if(ans != null)
{
Message msg = new Message();
msg.obj = ans;
AskInputActivity.this.handler.sendMessage(msg);
}
}
catch (IOException e) {
Message msg = new Message();
msg.obj = "net error";
AskInputActivity.this.handler.sendMessage(msg);
break;
}
catch (NullPointerException e)
{
Message msg = new Message();
msg.obj = "net error";
AskInputActivity.this.handler.sendMessage(msg);
break;
}
}
}
public void stop()
{
end = true;
}
}
另外一个。你建立线程的对象的。close也可以。
这个socket是全局的,这个程序的所有activity都需要这个socket的连接,除了在退出的时候close,然后每个activity启动的时候连一下之外有什么更好的解决方法么?主要是如果这个线程不停止,在别的activity里面请求服务器发送消息的时候,这个线程就会得到另一个activity所请求的信息然后报错,另一个activity就收不到该收到的信息了,所以想在退出activity的时候退出线程。听说线程可以用interrupt强制打断?