2013-03-10 75 views
0

我正在研究與服務器上的視頻同步的應用程序。它啓動一個IntentService,下載播放列表,將其插入數據庫並將實際視頻文件下載到SD卡。活動重新啓動時從意向服務重新連接Messenger

我在啓動服務時使用通過意向傳遞的信使傳達回已有多少%已下載。

我工作但很明顯,當活動被破壞並重新開始時,信使不會重新連接。

這個問題的解決方案是什麼?引導我進入正確的方向。謝謝

回答

1

如果你想使用一個信使,你需要保留一個引用你使用傳遞給intent服務的信使創建的處理程序。

如果活動被破壞並重新創建,該處理程序仍然綁定到前一個活動(這也可能導致泄漏)。

一種方法可能是在單例對象內或應用程序對象內引用該處理程序。

但是,由於intentservices的異步性質,我要做的是通過廣播通知進度,因此新活動可以註冊到intentservice引發的同一廣播。你永遠不知道該服務是否還活着或已完成工作。

使用localbroadcasts可能會產生更有效的解決方案。

+0

實際上,通過意圖進行溝通是我一開始想到的,然而這是我第一次進行這種溝通,並且已經使用了這個信使可以用於此,它似乎更適合。順便說一句,這兩者之間有什麼表現差異?我應該什麼時候使用Messenger?謝謝 – urSus 2013-03-10 23:49:15

+0

我會說,信使更適合傳統的意圖,當他們完成任務時(至少不是默認),他們不會完成任務。在這種情況下,您可以向該服務的唯一實例提供一個新的發送者再次發送調用「startService」。新信使將再次調用唯一服務的onStartCommand。另一方面,意向服務必須被視爲單項任務執行者,在他們完成工作時即失效。從性能的角度來看,如果你使用本地廣播,我會說有一些差異,正如我在我的回答中所建議的那樣。 – fedepaol 2013-03-11 06:39:29

+0

好的,謝謝,還有一件事我想問一下我可以多久使用本地廣播進行廣播?比方說,每0.01%更新一次,即在一兩分鐘內達到10000次,那還會不錯? – urSus 2013-03-11 08:32:15

相關問題