2012-06-08 109 views
1

Android代碼如何檢測處理程序的可運行進程何時完成?在這個特定的應用程序中,除了處理程序完成其工作外,不會生成其他事件。如何持續測試處理程序的可運行結束?

乾脆把周圍一個全球性的布爾標誌的連續測試while()循環似乎不工作:

... stuff to do before the handler's runnable is started 
while (globalBooleanFlagStatingThatRunnableIsNotYetFinished) 
        Thread.sleep(5); 
... stuff to do only after the handler's runnable is finished, like process data 

使用while()做法,似乎在執行分號永遠暫停,直到強制關閉被操作系統推送,不管可運行的成功設置所述布爾標誌。

其他人如何檢測到可運行進程的完成?

+0

哦,請不要忙 - 等待;我的手機實際上可能會融化使用某種事件/通知/回調/任何事情。 –

回答

0

你的while循環佔用了所有的CPU時間,所以沒有其他任何東西,比如UI消息,有時間處理。

通常的修復方法是在迴路內放置一個短的Sleep()。這導致對內核的調用,允許它運行其他任務位一段時間。

其他I/O如控制檯打印文件讀/寫也做到這一點。

0

您忙於等待,或者實際上等待這一事實表明您的應用的設計哲學中可能存在某些缺陷。通常情況下,如果您正在等待某些事情,您應該做的是觸發某個操作作爲對某個處理程序的響應。例如,在這種情況下,您可以簡單地處理onClick事件。如果你在一個線程中等待,爲什麼?相反,殺死線程,留下一些狀態(通過狀態機,實現延續),並且當onClick被調用時,啓動一個新任務來執行其餘的工作。

基本上,我不確定我是否買了,你實際上需要等待在這裏,而應該使用處理程序。

編輯:你正在尋找的編程類型是不可能在應用程序的主線程上。相反,你應該做的是使用AsyncTask,在那裏你完成任務中的工作(即定期打開閃光燈和關閉閃光燈)或者產生線程的服務。無論如何,您應該閱讀Android線程,您的問題可能與您嘗試使用主線程進行長時間運行操作有關。是的,這是可能的,但我不會稱之爲「實時編程」,這只是一個簡單的線程問題。

+0

謝謝@Kristopher - 看到我的更新 – androidAnnie

+0

@androidAnnie我同樣更新了答案。 –

相關問題