2012-02-10 37 views
0

我有一個ListView顯示有關一些實體(所有相同類型)的信息。每個實體都有一個狀態,取決於ListItem可以有不同的外觀。此外,根據實體的狀態,單擊ListItem會執行特定的操作。Android服務:隊列事件/任務在用戶界面中啓動,直到服務啓動?

當狀態的實體應該傳遞給使用它做一些操作的服務。

服務應該只在需要時啓動。因此,如果用戶點擊ListItem,服務將啓動並且實體應該被傳遞給它。然後該服務執行一些操作並且該實體的狀態改變。這將導致實體所屬ListItem的外觀發生變化。

  • 簡單的情況:該服務已經啓動和約束,所以當在列表項的 用戶點擊servicemethod傳遞實體可以 可以直接調用。
  • 困難的情況:該服務未啓動,用戶單擊ListItem的 。

什麼是對付第二種情況下,最好的方法是什麼?將實體保存在隊列中,等待服務啓動並通過隊列,還是有更優雅的方式? 在服務啓動之前,用戶可能已經點擊了多個ListItems。

或者是更好地保持在後臺運行所有的時間來避免這種服務?那麼問題是服務綁定是否足夠快,以至於如果用戶點擊ListItem,則對該服務的引用已經綁定。

非常感謝!

回答

0

如何仡是Service?如果它在後臺線程中一直沒有執行任何操作,那麼我會說最具響應性的有效方法是保持與Service的綁定,而包含您的ListViewActivity可以運行。這樣,你就沒有「困難的情況」。請記住:當用戶在前臺主動使用應用程序時,顯然他們希望使用該設備的資源。

做一個好公民,雖然和取消綁定在onPause()服務和onResume()重新綁定,以便Service可以但是如果需要殺死。我的意思是,無論如何,它可以在任何時候被殺害,但它是成爲負責任的Android公民的一部分。

不要忘記Service實體默認情況下在主線程中做所有的處理。如果您的Service確實在您談論的onClick()處理上執行了繁重的工作,您希望它在單獨的線程中運行,或者甚至在清單中放入不同的進程。