Android 如何在运行5秒后停止异步线程

Android 如何在运行5秒后停止异步线程,android,multithreading,asynchronous,Android,Multithreading,Asynchronous,必须创建线程并运行5秒,然后我想停止。我该怎么做 我不能用时间/毫秒做任何事情 THX.使用该方法。使用该方法。很抱歉,这里不清楚。这是我的同步线程示例。 我的函数listen()运行5秒钟,然后退出。Listen()是UDP侦听器 这段代码有一个问题,它会停止我的主线程(我的手机没有响应),直到listed()完成5秒的运行。我想使用异步线程,以避免我的手机冻结。当我说我不能对时间做任何事情时,我试图说我不能在listen()函数中放入某种计时器,然后测量经过的时间,然后在5秒后退出。不能那样

必须创建线程并运行5秒,然后我想停止。我该怎么做

我不能用时间/毫秒做任何事情


THX.

使用该方法。

使用该方法。

很抱歉,这里不清楚。这是我的同步线程示例。 我的函数listen()运行5秒钟,然后退出。Listen()是UDP侦听器

这段代码有一个问题,它会停止我的主线程(我的手机没有响应),直到listed()完成5秒的运行。我想使用异步线程,以避免我的手机冻结。当我说我不能对时间做任何事情时,我试图说我不能在listen()函数中放入某种计时器,然后测量经过的时间,然后在5秒后退出。不能那样做

Thread t = new Thread() {
    public void run() {
        try {
            listen();
        } catch (IOException e) {
            Log.d(TAG, "IOException (Discovery) " + e);
            e.printStackTrace();
        }
        synchronized (this) {
            notifyAll();
        }
    }
};
synchronized (t) {
    t.start();
    try {
        t.join(5000); // 5 sec

    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

对不起,这里不清楚。这是我的同步线程示例。 我的函数listen()运行5秒钟,然后退出。Listen()是UDP侦听器

这段代码有一个问题,它会停止我的主线程(我的手机没有响应),直到listed()完成5秒的运行。我想使用异步线程,以避免我的手机冻结。当我说我不能对时间做任何事情时,我试图说我不能在listen()函数中放入某种计时器,然后测量经过的时间,然后在5秒后退出。不能那样做

Thread t = new Thread() {
    public void run() {
        try {
            listen();
        } catch (IOException e) {
            Log.d(TAG, "IOException (Discovery) " + e);
            e.printStackTrace();
        }
        synchronized (this) {
            notifyAll();
        }
    }
};
synchronized (t) {
    t.start();
    try {
        t.join(5000); // 5 sec

    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

java中的线程是协作性的——不能强制停止线程。您可以做的是发出停止信号(调用interrupt()或升起一个标志),然后代码自动停止

因此:

  • 开始运行工作线程。在它内部重复(在主工作循环内部)检查
    isInterrupted()
    并捕获任何
    中断异常
    -在这种情况下退出线程

  • 启动TimerTask以运行5秒,然后在工作线程上调用
    interrupt()

  • 更新:poster解释说他已经有了一个工作代码,他只需要异步运行它而不阻塞UI


    解决方案:在它的
    doInBackground()
    方法中设置并运行代码。

    java中的线程是协作的-您不能强制停止线程。您可以做的是发出停止信号(调用interrupt()或升起一个标志),然后代码自动停止

    因此:

  • 开始运行工作线程。在它内部重复(在主工作循环内部)检查
    isInterrupted()
    并捕获任何
    中断异常
    -在这种情况下退出线程

  • 启动TimerTask以运行5秒,然后在工作线程上调用
    interrupt()

  • 更新:poster解释说他已经有了一个工作代码,他只需要异步运行它而不阻塞UI


    解决方案:在它的
    doInBackground()
    方法中设置并运行代码。

    您想运行5秒钟,而不花时间做任何事情吗?什么?你想跑5秒钟,而不花时间?什么?设置
    AsyncTask
    并在其
    doInBackground()
    方法中运行此代码。设置
    AsyncTask
    并在其
    doInBackground()
    方法中运行此代码。这看起来很不错。我可以使用postDelayed在5秒后取消异步任务吗?谢谢。这看起来很有希望。我可以使用postDelayed在5秒后取消异步任务吗?谢谢