看板 AndroidDev 關於我們 聯絡資訊
我想做比較穩定的即時service, 基本上不需要service長期運作,只要想要的時候可以叫得醒service就好, 然後,一旦派送工作到service,最好service可以運作到工作完成. 就算app關掉了,已經送上service的工作也要繼續完成. 聽說IntentService可以管理一些thread,我頗心動,就將舊程式模型修改 為IntentService. 舊程式是啟動app時會啟動service,然後可以即時bindService把工作派上去. bindService時有開partial wake lock和wifi lock,然後service會啟動AsyncTask, AsynTask中也開wake lock和wifi lock (使用service context). 如果有一百個工作,就會發送一百個AsyncTask;這些AsyncTask共搶一個lock. 運作起來,如果app還開著時都會運作,而如果app關掉,就看情況,通常是大批工作 的後面一大段AsyncTask-s都不見. 我猜是因為當時service已經結束. 修改為IntentService的方式,我查了手冊及例子,覺得好像是把 ... extends Service { 改成 ... extends IntentService { 這樣是基本. 接著看到的例子說,要啟動就是丟資料到intent然後用startService 方式派上去,但我看這樣應該是只有IntentService啟動時會onHandleIntent吧? 另外,應該也是照樣使用bindService. 整體來說,我舊程式改成新程式就是 把Service改成IntentService而已. 後來測試新程式的運作情況,覺得好像與舊程式很接近. 也對,其實就是沒改過. 那請問IntentService怎麼用可以做到本文第一段所說的需求呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.112.229.204 ※ 編輯: yauhh 來自: 59.112.229.204 (04/26 22:49)
LaPass:onHandleIntent(){ 這裡面放個lock把她卡住 } 04/26 23:20
yauhh:如果前一個handling工作比較久,會讓後來的intent逾時嗎? 04/26 23:24
yauhh:另外問題,送intent都用startService送嗎? 謝謝 04/26 23:25
LaPass:建議用onbind,這樣就可以做複雜一點的事 04/26 23:27
LaPass:如果架構不好改的話,妳找看看,是onstart還是什麼on什麼的 04/26 23:29
yauhh:onStartCommand? 04/26 23:32
LaPass:妳把滑鼠移到onStartCommand,再看一下eclipse顯示什麼,應 04/26 23:55
LaPass:該會比我問來的準,因為我也是看那個東西 04/26 23:55
LaPass: 問我 04/26 23:55