作者james732 (好人超)
站内AndroidDev
标题[问题] 关闭serverSocket.accept()的Thread
时间Tue Jul 19 22:19:53 2011
※ [本文转录自 java 看板 #1E9Kow2V ]
作者: james732 (好人超) 站内: java
标题: [问题] 关闭serverSocket.accept()的Thread
时间: Tue Jul 19 17:21:59 2011
如果我有一个新执行绪,里面有个无穷回圈执行 serverSocket.accept()
private class ListenThread extends Thread {
ServerSocket serverSocket;
public ListenThread(ServerSocket s) {
serverSocket = s;
}
@Override
public void run() {
try {
while (true) {
Socket s = serverSocket.accept();
new JobThread(s).start();
}
} catch (IOException e) {
}
}
}
public static void Main(String[] s) {
Thread t = new ListenThread(new ServerSocket(5566));
t.start();
// 做一些其他的工作
// 我想在这里结束执行绪 t, 并且关闭 ServerSocket
// 继续做一些其他的工作
}
我想问的是,当这个执行绪在 accept() 等待 client 的连线时
要怎麽样能够结束这个执行绪,同时关闭这个 ServerSocket 呢?
另外分享一件蠢事...
我最近把程式写成这样
new Thread() {
@Override
public void run() {
// 一些耗时的工作
}
}.
run();
然後很疑惑为什麽我会一直收到ANR(Android is Not Responding)
还在想说Android的thread是不是哪里不一样...
之前比较习惯写这样
class MyThread extends Thread { ... }
main() {
MyThread t = new Thread();
t.start();
// 这个时候明明不会写错....
}
练习
(偷懒)用了一下 Anonymous inner class 就耍笨了...
觉得 override run() 之後接着执行 run() 是一件很顺手的事 orz
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.117.171.40
1F:→ calais007:在你的class里面多做一个public method来做这件事应该 07/19 18:05
2F:→ tkcn:前面那样写没问题,因为已经是在另一个thread里等待 accept 07/19 18:15
我想请教的问题是:要怎麽停止那个 accept()
因为我写的是 Android service
它会一直摆在背景执行,等待 Client 的连线并且做一些事
直到 Android 系统把我这只 service 砍掉
而我想在 onDestroy() 被呼叫时,清理掉这只 Thread 以及关闭 ServerSocket
避免 Service 已经砍掉,但 Thread 还在跑 accept() 的怪异情况
(还是说,因为我的 Service 与 Thread 位於同一个 Process 里,
在 Service onDestroy() 之後,这只 Thread 跟 ServerSocket 都会自然被砍掉,
所以不需要费心清理吗?)
※ 编辑: james732 来自: 114.35.184.77 (07/19 22:19)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.35.184.77