Android 在 Activity 被销毁时停止 Activity 中的线程

标签 android multithreading tcp

我有一个在 onStart() 方法中创建线程的 Activity 。 Thread 用于通过 TCP 读取网络数据,并在 while 循环中具有阻塞网络读取方法,该方法在每次递增时检查 bool 变量。

我的问题是,当使用返回键销毁 Activity 时,我将 bool 循环控制变量的值设置为 false,但线程不会完成,因为它卡在阻塞网络方法上。

public class MyActivity extends Activity implements Runnable
{
    Thread thread;
    boolean loopControl;
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
    }
    protected void onStart()
    {
        super.onStart();
        loopControl=true;
        thread = new Thread(this);
        thread.start();
    }

    public void run()
    {
        while(loopControl)
        {
            directories = (Vector<String>) TCPFunctions.inputStream.readObject();
        }
    }

    protected void onDestroy()
    {
        super.onDestroy();
        loopcontrol = false;
    }
}

我该如何完成我想要的线程,因为它会在再次启动此 Activity 时产生问题。

实际上每次 Activity 启动时它都有一些数据要从服务器读取

最佳答案

在你的 onDestroy() 方法中尝试

thread.interrupt();  
thread=null;

关于Android 在 Activity 被销毁时停止 Activity 中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11811981/

相关文章:

SSL/TLS 握手之前或之后

android - ScrollView 中的多个 WebView 出现问题 (Android)

java - Java中线程退出时,可运行类的实例是否会被销毁

java - 我如何为执行程序选择线程数

ios - 如何与 PLC 建立数据交换连接?输入/输出

c# - 需要 C# 服务器/客户端样式程序的帮助

android - Database.Logger.Level 枚举值在版本 11.0.0 中不可访问

android - 如何访问Android图片资源(Eclipse)

android - 为什么我不能在内部类 ViewHolder 中使用 var mSelectedItem?

c++ - 分离线程使用单例拥有的资源是否安全