2011-11-16 73 views
2

我正在開發Android的倒數計時器應用程序。該應用程序可以顯示剩餘時間。即使電話被鎖定或主要活動被破壞,它也必須工作。我想知道哪個以下應該使用,更重要的是,爲什麼我應該使用它(和爲什麼不是其他)。服務vs可運行vs AsyncTask

  • 服務
  • 可運行:靜態參照Runnable對象。該引用在Activity類中聲明。
  • 的AsyncTask
+2

你能詳細說明這個計時器應用程序應該做什麼嗎?它是否像秒錶?一個鬧鐘? – kaspermoerch

+0

您的計時器應用程序正在執行什麼操作? –

+0

http://stackoverflow.com/questions/4909634/service-handler-timer-runnable-which-to-use-and-how –

回答

2

在我看來,如果你的應用需要能夠在後臺通知用戶,我會用一個服務,所以如果你的應用程序已經被用戶置於後臺,當定時器準備就緒時,仍然可以通知用戶,然後可以使用基於位置的事件時間等。

+0

另一種選擇呢?我想知道選擇應用程序中的每個選項的專業和建議。 – wannik

+0

AsyncTask只是一個從UI線程啓動的新線程,它主要是爲了檢索數據並顯示它,而不是等待這麼久,但這將在應用程序啓動時工作。一旦關閉,線程將退出。 –

+0

Runnable只是一個代碼,意味着要在後臺線程上運行,所以同樣的原則,如果你的應用程序放在後臺將停止運行 –

2

服務在這種情況下最好,它會像你一樣要求,甚至在米的時候繼續跑步ain活動被破壞,並且不太可能被Android操作系統殺死。

AsyncTask和runnable都依賴於你的應用程序仍然處於活動狀態,而一個服務獨立運行,當它打開或重新啓動以顯示從服務傳遞的信息時,或者服務可以在它自己的,顯示通知等等。

+0

如果我對AsyncTask或Runnable進行了靜態引用,只要我的應用程序存活,該對象是否會存在? – wannik

+0

由於Android系統決定在低內存條件下應該殺死什麼,所以我無法確定地告訴您,但無論哪種方式,您不應將AsyncTask用於正在進行的進程,AsyncTask的要點是運行在後臺執行任務,並在進程間隔或結束時在UI線程上執行方法,如果你的應用程序被殺死了,我相信AsyncTask會與它一起。 你真的應該使用服務來進行一些事情。你的目標是即使活動被銷燬也能運行一些東西,而服務是活動獨立的方式。 – Guykun