有没有办法检查 Thread 对象是否已经调用了 start ?
我正在尝试这样做:
if(rt.isAlive() == true)
{
Log.v(TAG, "START RECORD");
rt.recording = true;
}
else
{
Log.v(TAG, "START THREAD/RECORD");
rt.start();
}
如果线程尚未运行,它将在其中启动线程。
假设
rt
是 Thread
,只需检查 rt.isAlive()
。
或者,只需在开始线程之前使用布尔标志并将其设置为 true 即可。
我实际上更喜欢布尔方法,因此主线程不可能启动另一个线程两次 - 在您的线程启动并运行之前可能会有短暂的延迟,并且如果您的主线程尝试在快速连续,可能会在
rt.isAlive()
上得到“假”阴性结果。
我已经成功地使用了这种方法:
if ( mythread.getState() == Thread.State.NEW )
//then we have a brand new thread not started yet, lets start it
mythread.start();
else
//it is running already compensate
如果你调用了它的start,并且它正在运行,你会得到一个
IllegalThreadStateException
。 抓住这一点是了解的一种方法。
另一个选择是扩展线程并添加一个布尔值,用于跟踪线程是否已启动。 您可以重写 Thread 的 start 方法来在调用
super.start()
之前检查布尔值。
在 Android 中使用线程时应该非常小心。 确保您了解启动它的组件的生命周期。 另外,您应该考虑一些辅助类,例如 Handler 和 AsyncTask,而不是直接生成线程。
通过传递一个线程来调用该方法。它将每 500 毫秒检查一次线程是否处于活动状态,启动延迟为 500 毫秒(您可以使用自定义值)。我经常用这个方法。
void threadAliveChecker(final Thread thread) {
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if (!thread.isAlive()) {
// do your work after thread finish
runOnUiThread(new Runnable() {
@Override
public void run() {
// do the ui work here
}
});
timer.cancel();
}else {
// do work when thread is running like show progress bar
}
}
}, 500, 500); // first is delay, second is period
}
示例:
Thread thread = new Thread(myRunnable);
thread.start();
threadIsAliveChecker(thread);
这个方法会让我们知道线程何时完成其工作。