[英]How to check if an Android Thread is running
有沒有辦法檢查一個 Thread 對象是否已經開始調用它?
我正在嘗試這樣的事情:
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() == Thead.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 並添加一個布爾值,您可以在其中跟蹤您的 Thread 是否已啟動。 您可以在調用super.start()
之前覆蓋 Thread 的 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);
此方法將讓我們知道線程何時完成其工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.