2013-11-28 31 views
2

當開發我的android應用程序時,遇到以下問題:Android會在什麼時候自動掛起一個線程?

處理程序線程被android自動掛起。 Eclipse在「DDMS」透視圖中將線程的狀態顯示爲「掛起」。線程的處理程序不再處理髮送給它的消息(我設置了一個斷點,程序從不去那裏)。與此同時,應用程序正常運行,除了由於沒有數據,UI模塊無法顯示任何內容。 (此線程用於從本地數據庫和網絡加載數據。)

我的問題是:在什麼樣的情況下android虛擬機會掛起一個線程?

回答

3

據我所知,沒有這樣的掛起線程。有螺紋的一些州:

  • 新(還沒有開始呢)
  • 運行
  • 等待/阻塞(等待運行時,將被阻止之前synchronized blockObject.wait()叫,或Thread.sleep()

你的線程被掛起,當你的進程被殺死。(例如,通過一個未捕獲的異常,或進程強制關閉) 還有一個進程關閉,當沒有更多的線程運行。 Android操作系統可能會選擇殺死一個進程,以釋放資源給用戶的可見進程。

檢查this鏈接。

Btw Thread.suspend()已棄用。不要使用它。

+0

謝謝。我編輯了我的問題,使其更加詳細。線程的處理程序沒有處理髮送給它的消息。 Android DDMS顯示其狀態爲「掛起」。 Android DDMS使用「suspend」這個詞來表示一種狀態的原因一定是有原因的。 – Guocheng

+0

就我所知,處理程序與UI線程有某種聯繫,因此,如果您在處理程序上發佈了某些內容,並且活動/用戶界面不可見或被銷燬,則該信息可能永遠不會運行。如果您使用某種時間發送消息,那麼您應該考慮使用單個線程,因爲應用程序不會關閉它。你可以用'Thread.sleep()'或'Object.wait()'來計時。如果你想在線程中做一些與用戶界面相關的事情,那麼你可以轉向你處理程序並將其發佈。 – Sipka

+0

你的意思是一個非UI線程的處理程序以某種方式與UI線程連接?在我的情況下,活動/用戶界面仍然在前面。 – Guocheng