AndroidDev 板


LINE

※ 引述《yauhh (喲)》之銘言: : 我想做比較穩定的即時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怎麼用可以做到本文第一段所說的需求呢? 東西太多了,直接打 Activity跟Service的溝通方式,至少有兩種 簡單一點的,就是在啟動、呼叫service時,丟個Intent過去 我記得在官方文件那邊有個生命周期... 有本看過的書上也看過 就是server已經在運作時,android會去呼叫另一個方法 那個方法就能接受intent,去取得資料 另外 Lock lock = new Rrealatylock(); //忘了那個lock怎麼拼 public void ononHandleIntent() { lock.lock(); //這樣就可以確保這個service不會被android砍掉 //我通常會在這裡面寫個迴圈,每個幾秒或是幾分鐘去檢查運作正不正常 //直到這個service該結束掉時,才lock.unlock();把這個地方給結束掉 } 另外一種方法是複寫service的 onBind()方法 在activty中用bindService() 不知道有沒有拼對.... 按alt+/他會自己跳出來,我懶得記 在這個方法中需要有個callback物件當參數 (S...C....什麼的) 在service跟activity連上時,會呼叫那個callback中的onBindService 在那裏會收到Service中的IBinder 這樣一來,就能在activity中去呼叫service的方法 service跟activity連結的簡單範例大概會像這樣: interface MyServiceAct { int getX(); } //===================================== public MyService extant Service { int i = 1000; public class MyBinder extant Binder implement MyServiceAct { public int getX(); { return i; } } public onBind(....) { return new MyBinder(); } ....... } //=================================== Activity 就這樣用 class Sc implement S....C.... { public onBindService(IBinder binder, .....) { MyServiceAct msa = (MyServiceAct)binder; msa.getX(); //從activity中取得service中的i } public onUnBindService(.....) { ....... } } startService(.....); bindService(.... new Sc()....); //==================================== 完蛋了,我沒有IDE就不會寫程式了... orz.... 抱歉,因為現在沒有eclipse,所以很多東西都記得不清楚 但差不多就是這樣 -- --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.233.154.127 ※ 編輯: LaPass 來自: 125.233.154.127 (04/26 23:56) ※ 編輯: LaPass 來自: 125.233.154.127 (04/27 00:03)
1F:推 yauhh:謝謝,這像是起碼有個手畫地圖,看起來很有方向感 04/27 06:53
2F:推 gpc:現在寫native或jni也是沒IDE可用...XD 04/27 10:32
4F:→ yauhh:ce.html#START_STICKY http://0rz.tw/m2HE0 這個旗標可用嗎? 04/30 00:41
5F:→ LaPass:沒應向 那部分我是邊試邊寫出來的 04/30 13:56







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP