我有调用连接到 IRC 服务器的新线程的代码。线程有循环来监听来自 IRC 服务器的响应,并调用方法“ProcessData”来操作响应。
在我的 UI 上,我希望能够在 onStop 和 onPause 中“退出”IRC 服务器。我遇到的问题是,当我使用处理程序向我的 IRC 线程发布消息时,该线程向 IRC 服务器发送 QUIT 命令,它告诉我我正在 UI 线程上执行网络操作。
处理程序是在我的 IRCManager 类中设置的(这个类扩展了 Thread 并且是我在单独的线程上运行的类。
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);
编辑:这是 processData 方法
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 服务器的输入流。这可能也与它有关。