我有调用连接到IRC服务器的新线程的代码。线程有循环来侦听来自IRC服务器的响应,并调用一个方法'ProcessData'来响应。使用处理程序向正在运行的线程发布消息
在我的用户界面上,我希望能够'退出'在onStop和onPause的IRC服务器。我遇到的麻烦是,当我使用Handler向IRC线程发送消息并向IRC服务器发送QUIT命令时,它告诉我正在UI线程上执行网络操作。
的处理程序是建立在我的IRCManager类(此类扩展线程,而我在一个单独的线程运行的类。
public Handler networkHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
try {
processData((String) msg.obj);
} catch (IOException e) {
Log.e(TAG, "network handler given an object NOT of type String");
}
super.handleMessage(msg);
}
};
我用的是处理器从主活动,刚开始后对其进行实例化网线
irc.start();
networkHandler = irc.networkHandler;
在活动的onPause我将消息发送给处理器
Message msg = new Message();
msg.obj = IRCManager.QUIT;
networkHandler.sendMessage(msg);
编辑:这里是过程数据的方法
void processData(String data) throws IOException {
if (data.contains("PING")) {
String pingId = data.substring(6, data.length());
sendMessage(pong + pingId + "\n");
isConnected = true;
Message msg = new Message();
msg.what = 1;
msg.obj = "test";
handler.sendMessage(msg);
} else if (data.contains("Welcome")) {
sendMessage("PRIVMSG " + BOT_NAME + " JOIN " + siteId + "\n");
} else if (data.contains(IRCManager.QUIT)) {
disconnect();
} else if (isClientConnected()) {
Message msg = new Message();
msg.what = 2;
msg.obj = "test";
handler.sendMessage(msg);
}
}
似乎处理程序未正确连接到线程。任何人都可以阐明我如何做到这一点?
我的线程实际上花费99%的时间在while循环中检查来自IRC服务器的输入流。这也可能与它有关。
你可以发布processData方法吗? – 2013-03-25 14:11:26
您好,我已更新原始帖子 – Stephen 2013-03-25 14:17:49
sendMessage()是否进行网络调用? – 2013-03-25 14:18:40