java - Android Stop Runnable 在新线程中创建

标签 java android multithreading udp runnable

在我的 Android app 中,我启动了一个 Runnable(称为 remoteUDPRunnable),它建立了一个 UDP在新的Thread中与另一台设备连接,如下所示:

new Thread(remoteUDPRunnable).start();

在某些情况下,我想停止那个线程(并取消UDP 连接),但我不知道如何停止

我已经尝试将 Thread 实例保存在 variable 中并调用 myThread.interrupt() 但它不起作用。

我也试过像这样使用 Handler:

final Handler remoteUDPRunnableHandler = new Handler();
remoteUDPRunnableHandler.post(remoteUDPRunnable);

所以我可以取消它:

remoteUDPRunnableHandler.removeCallbacks(remoteUDPRunnable);

这行得通,但是当我调用 post(remoteUDPRunnable) 方法时,我得到了一个 NetworkOnMainThreadException。我还尝试将代码放在 AsyncTask 中的 Runnable 中,但它也不起作用。

有什么想法吗?我对此很陌生,对此我有些困惑。 谢谢

最佳答案

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

来电thread.interrupt()只在该线程中设置一个标志。但是,如果您从不检查它并用它做点什么,它就完全没用了。

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

此外,如果 InterruptedException被抛出,中断标志也被重置,所以你可能需要调用 Thread.interrupt()再次进入您的可运行状态。

关于java - Android Stop Runnable 在新线程中创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36843785/

相关文章:

java - 向连接到 Wi-Fi 网络的所有设备发送通知

Java Android : BufferedInputStream to byte Array

Android Textview背景颜色资源

java - Android中可以发生优先级倒置吗

java - 等待另一个线程中的邮件发送完成

java - 在android中的 Activity 后面运行一个线程

java - Docker compose mysql 容器在依赖它的应用程序之后运行

java - 如何在一个事务中调用多个DAO函数

android - 我想让我的应用程序只在android中的横向

android - 无法使用 Firebase 广告 : No static method zzc(Landroid/os/Bundle;