停止线程可运行是不可能的
Stop Thread Runnable impossible
我有这个帖子:
myThread = new Thread(new Runnable() {
public void run() {
ServerSocket ss = null;
while (!end) {
final String incomingMsg;
try {
ss = new ServerSocket(2201);
ss.setSoTimeout(15000);
.. some code ...
}
});
myThread.start();
现在我需要用按钮停止它,但没有任何效果,我已经尝试了一些代码,例如:
Handler handler= new Handler();
handler.removeCallbacks(myThread);
myThread.interrupt();
但是线程没有停止 =(
你不能。 Android 将在需要时自动停止线程。
你可以做的就是停止执行 run()
方法中的代码,使用 boolean
或其他方法
接受的答案不正确。 Android 不管理您启动的线程,但是您启动它们。
从技术上讲,线程不能 "stopped"。他们可以打断。中断线程仅意味着设置了一个标志,您在线程的实现中需要考虑并退出 run()
方法。例如,
Thread t = new Thread(new Runnable() {
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
// Do stuff
}
}
});
然后您可以稍后调用 t.interrupt()
到 "stop" 您的线程。
如果您在线程的实现中忽略中断标志,您的线程将永远不会停止。例如,如果您将上面的 // Do stuff
替换为 SystemClock.sleep(Integer.MAX_VALUE)
,则线程将永远不会退出,无论它是否被中断。
SDK中实现的很多IO操作也会注意interrupted标志,这就是为什么你可以中断一个参与阻塞IO的线程。参见 InterruptedException
。
您可以使用 .stop(),但这是非常糟糕的做法,会给您带来一些麻烦。尝试在 .运行() 中添加一些布尔值(如 Wizard 所说)
我有这个帖子:
myThread = new Thread(new Runnable() {
public void run() {
ServerSocket ss = null;
while (!end) {
final String incomingMsg;
try {
ss = new ServerSocket(2201);
ss.setSoTimeout(15000);
.. some code ...
}
});
myThread.start();
现在我需要用按钮停止它,但没有任何效果,我已经尝试了一些代码,例如:
Handler handler= new Handler();
handler.removeCallbacks(myThread);
myThread.interrupt();
但是线程没有停止 =(
你不能。 Android 将在需要时自动停止线程。
你可以做的就是停止执行 run()
方法中的代码,使用 boolean
或其他方法
接受的答案不正确。 Android 不管理您启动的线程,但是您启动它们。
从技术上讲,线程不能 "stopped"。他们可以打断。中断线程仅意味着设置了一个标志,您在线程的实现中需要考虑并退出 run()
方法。例如,
Thread t = new Thread(new Runnable() {
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
// Do stuff
}
}
});
然后您可以稍后调用 t.interrupt()
到 "stop" 您的线程。
如果您在线程的实现中忽略中断标志,您的线程将永远不会停止。例如,如果您将上面的 // Do stuff
替换为 SystemClock.sleep(Integer.MAX_VALUE)
,则线程将永远不会退出,无论它是否被中断。
SDK中实现的很多IO操作也会注意interrupted标志,这就是为什么你可以中断一个参与阻塞IO的线程。参见 InterruptedException
。
您可以使用 .stop(),但这是非常糟糕的做法,会给您带来一些麻烦。尝试在 .运行() 中添加一些布尔值(如 Wizard 所说)