2010-05-16 65 views
2

我正在構建的應用程序使用本地Service將文件從網絡下載到手機的SD卡。在這個應用程序中,用戶可以瀏覽書籍列表,並在線閱讀。用戶還可以下載pdf副本以供離線查看。從本地服務溝通進度

要處理下載,我使用的是本地綁定Service。我不希望這個Service一直運行,只有在下載文件時。因此Service可以在其任務完成時自行關閉,我不綁定服務,而是通過傳遞給Context.startServiceIntent發送「enqueue for download」命令。

可供下載的書籍顯示在列表中。用戶可以通過點擊列表中的行來選擇下載圖書。在下載時,我需要在實際的書籍列表行上使用ProgressBar來顯示下載進度。我還需要在行上顯示一本書是否可以下載,或者下載是否已完成或失敗。例如,書籍可以在整個應用程序中以不同的活動顯示 - 例如在搜索中或在用戶喜愛的書籍列表中。當書籍顯示在不同的地方時,這些不是同一個對象,但它們的唯一標識是bookId

因爲我不想從每一個Activity綁定到服務,我的設想是使用一個public static final HashMapService類本身包含的bookId映射下載狀況,排隊,下載,取消了enum,等等。每個書籍視圖在顯示時都會檢查該靜態HashMap,並且如果bookId在地圖中,則檢索並顯示其狀態。我並不特別喜歡這個想法,但目前這是我能想到從服務中檢索狀態的唯一方式,而不必綁定到它並啓動它。

此外,如果是活動下載,我需要從Service獲取下載進度百分比,對於給定的bookId。再次,我寧願不從任何活動綁定到服務,所以我不知道如何去從Service檢索當前的進度。我目前的計劃是使用某種單身中介,Service將推送更新,並且可以讀取視圖。但我對這個想法並不滿意。

我想避免綁定到每個Activity的Service的原因是1.)我已經在運行另一個Service和2.)綁定是冗長的,我想避免需要傳遞引用到Service(但毫無疑問,這不是太多問題)。

也許綁定到本地Service是不是足夠昂貴,以保證這種其他設置?我不應該關心每個Activity的綁定嗎?也許這是一個非問題?

回答

2

我想避免結合 從每個活動服務的原因是 1)我已經運行的其他服務

然後考慮兩者結合。

2。)結合是冗長,我想避免需要圍繞一個 引用傳遞到服務

每一項活動都應該有自己的連接服務。

也許綁定到本地服務 是不是足夠昂貴,以保證此 其他設置?

綁定到本地服務的行爲是很便宜的。

+0

我正在考慮結合這兩種服務,但其中一種是前臺服務,這種服務不需要。至於傳遞一個連接,我的意思是在Activity內部,它的視圖和點擊監聽器。 – skyler 2010-05-17 23:49:37

+0

「我正在考慮將這兩種服務結合起來,但其中一種服務是前臺服務,並不需要這樣做。」啊,好邏輯,那裏。 「至於傳遞一個連接,我的意思是在活動中,對其觀點和點擊聽衆。」好。我通常有聽衆,這些都是活動的私人內部類,所以沒有必要「傳遞」。 – CommonsWare 2010-05-18 20:51:10