在我的Android
app
中,我开始Runnable
(称为remoteUDPRunnable
),与新UDP Connection
中的其他设备建立Thread
像这样:
new Thread(remoteUDPRunnable).start();
在某些情况下,我想停止Thread
(并取消UDP connection
),但我不知道如何
我已尝试将Thread
个实例保留在variable
并致电myThread.interrupt()
,但它无效。
我也尝试使用这样的Handler
:
final Handler remoteUDPRunnableHandler = new Handler();
remoteUDPRunnableHandler.post(remoteUDPRunnable);
所以我可以取消它:
remoteUDPRunnableHandler.removeCallbacks(remoteUDPRunnable);
这有效,但当我调用post(remoteUDPRunnable)
方法时,我得到NetworkOnMainThreadException
。我还尝试将代码放在Runnable
内的AsyncTask
内,但它也不起作用。
有什么想法吗?我对此非常陌生,我对它有点困惑。 感谢
答案 0 :(得分:2)
如果您自己编写了remoteUDPRunnable
类,则需要确保(以编程方式)该线程结束。
调用thread.interrupt()
仅在该线程中设置标志。但如果你从来没有检查它并用它做某事,那就完全没用了。
在你的runnable中你需要调用Thread.interrupted()
,如果它返回true,则启动线程的关闭。注意,调用Thread.interrupted()
会重置执行线程的中断标志。
此外,如果抛出InterruptedException
,中断标志也会重置,因此您可能需要再次在runnable中调用Thread.interrupt()
。