簡體   English   中英

如何檢查Android線程是否正在運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM