【发布时间】:2016-04-25 14:41:16
【问题描述】:
在我的Androidapp 中,我启动了一个Runnable(称为remoteUDPRunnable),它与另一个设备在新的Thread 中建立UDP Connection,如下所示:
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 中,但它也不起作用。
有什么想法吗?我对此很陌生,对此我有些困惑。 谢谢
【问题讨论】:
-
中断只是在线程中设置一个标志。您需要在 Runnable 中检查该标志 (Thread.interrupted()) 并确保您的线程自行结束。
-
Re,“我已经尝试 [...] 致电
myThread.interrupt(),但它不起作用。”:怎么不起作用?这听起来像是一个很好的 StackOverflow 问题。您应该编写一个其他人可以运行的小型、独立的示例程序,显示t.interrupt()没有按照您的预期执行;然后你应该把它贴在这里,问我们为什么它没有做你期望它做的事情。 -
P.S.:在这个问题中没有理由使用“Runnable”这个词。
Runnable只是意味着它是一个对象,它有一个名为void run()的方法。它没有告诉我们您如何使用该对象的任何信息。
标签: java android multithreading udp runnable