【发布时间】:2010-11-24 22:00:43
【问题描述】:
必须创建线程并运行 5 秒,然后我想停止。我该怎么做?
我对时间/毫秒无能为力。
谢谢。
【问题讨论】:
-
你想跑 5 秒,而不用时间做任何事情?什么?
标签: android multithreading asynchronous
必须创建线程并运行 5 秒,然后我想停止。我该怎么做?
我对时间/毫秒无能为力。
谢谢。
【问题讨论】:
标签: android multithreading asynchronous
java 中的线程是协作的——你不能强行停止一个线程。你能做的就是发出信号让它停止(调用interrupt()或引发一个标志),然后代码自愿停止。
所以:
开始运行您的工作线程。在其中反复(在主工作循环内)检查isInterrupted() 并捕获任何InterruptedExceptions - 在这种情况下退出线程。
启动 TimerTask 运行 5 秒,然后在工作线程上调用 interrupt()。
更新: 发帖人解释说他已经有一个工作代码,他只需要异步运行它而不阻塞 UI。
解决方案:设置 AsyncTask 并在其 doInBackground() 方法中运行您的代码。
【讨论】:
使用AsyncTask.cancel(true) 方法。
【讨论】:
抱歉这里没有说清楚。这是我的同步线程示例。 我的函数 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();
}
}
【讨论】:
AsyncTask 并在其 doInBackground() 方法中运行此代码。