Android Stop Runnable在新线程中创建

时间:2016-04-25 14:41:17

标签: java android multithreading udp runnable

在我的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内,但它也不起作用。

有什么想法吗?我对此非常陌生,我对它有点困惑。 感谢

1 个答案:

答案 0 :(得分:2)

如果您自己编写了remoteUDPRunnable类,则需要确保(以编程方式)该线程结束。

调用thread.interrupt()仅在该线程中设置标志。但如果你从来没有检查它并用它做某事,那就完全没用了。

在你的runnable中你需要调用Thread.interrupted(),如果它返回true,则启动线程的关闭。注意,调用Thread.interrupted()会重置执行线程的中断标志。

此外,如果抛出InterruptedException,中断标志也会重置,因此您可能需要再次在runnable中调用Thread.interrupt()