我正在構建的應用程序使用本地Service
將文件從網絡下載到手機的SD卡。在這個應用程序中,用戶可以瀏覽書籍列表,並在線閱讀。用戶還可以下載pdf
副本以供離線查看。從本地服務溝通進度
要處理下載,我使用的是本地綁定Service
。我不希望這個Service
一直運行,只有在下載文件時。因此Service
可以在其任務完成時自行關閉,我不綁定服務,而是通過傳遞給Context.startService
的Intent
發送「enqueue for download」命令。
可供下載的書籍顯示在列表中。用戶可以通過點擊列表中的行來選擇下載圖書。在下載時,我需要在實際的書籍列表行上使用ProgressBar
來顯示下載進度。我還需要在行上顯示一本書是否可以下載,或者下載是否已完成或失敗。例如,書籍可以在整個應用程序中以不同的活動顯示 - 例如在搜索中或在用戶喜愛的書籍列表中。當書籍顯示在不同的地方時,這些不是同一個對象,但它們的唯一標識是bookId
。
因爲我不想從每一個Activity
綁定到服務,我的設想是使用一個public static final HashMap
上Service
類本身包含的bookId
映射下載狀況,排隊,下載,取消了enum
,等等。每個書籍視圖在顯示時都會檢查該靜態HashMap,並且如果bookId在地圖中,則檢索並顯示其狀態。我並不特別喜歡這個想法,但目前這是我能想到從服務中檢索狀態的唯一方式,而不必綁定到它並啓動它。
此外,如果是活動下載,我需要從Service
獲取下載進度百分比,對於給定的bookId
。再次,我寧願不從任何活動綁定到服務,所以我不知道如何去從Service
檢索當前的進度。我目前的計劃是使用某種單身中介,Service
將推送更新,並且可以讀取視圖。但我對這個想法並不滿意。
我想避免綁定到每個Activity的Service
的原因是1.)我已經在運行另一個Service
和2.)綁定是冗長的,我想避免需要傳遞引用到Service
(但毫無疑問,這不是太多問題)。
也許綁定到本地Service
是不是足夠昂貴,以保證這種其他設置?我不應該關心每個Activity
的綁定嗎?也許這是一個非問題?
我正在考慮結合這兩種服務,但其中一種是前臺服務,這種服務不需要。至於傳遞一個連接,我的意思是在Activity內部,它的視圖和點擊監聽器。 – skyler 2010-05-17 23:49:37
「我正在考慮將這兩種服務結合起來,但其中一種服務是前臺服務,並不需要這樣做。」啊,好邏輯,那裏。 「至於傳遞一個連接,我的意思是在活動中,對其觀點和點擊聽衆。」好。我通常有聽衆,這些都是活動的私人內部類,所以沒有必要「傳遞」。 – CommonsWare 2010-05-18 20:51:10