[問題] AsyncTask

看板AndroidDev作者 (617公車)時間13年前 (2011/06/18 21:02), 編輯推噓8(8018)
留言26則, 4人參與, 最新討論串1/1
TransmissionTask.java: import android.content.Context; import android.os.AsyncTask; public class TransmissionTask extends AsyncTask<Object, Void, Object> { private Context context; public TransmissionTask(Context context){ this.context = context; } @Override protected Object doInBackground(Object... params) { Object result = null; result = 網路傳輸的回傳; return result; } @Override protected void onProgressUpdate(Void... progress) { } @Override protected void onPostExecute(Object result) { Log.d("TransmissionTask", result.toString()); } } Main.java片段: Integer ret = null; final TransmissionTask task = new TransmissionTask(this); task.execute(); while(task.getStatus() != AsyncTask.Status.FINISHED){} try { ret = (Integer)task.get(); } catch (Exception e) { e.printStackTrace(); } 大家好,最近準備要用AsyncTask寫一堆網路傳輸的小工具,因為這個AsyncTask會一直重 覆使用在各個class內,所以我沒有像書中寫的,直接寫在inner class,而是寫成一個獨 立的class file。 所以我現在在Main.java使用TransmissionTask的時候,發生了一件難解的問題。原先如 果是使用inner class的話,可以直接在onPostExecute method,將後續要處理的事情放 在這個裡面。 可是現在寫成獨立的class file,變成一定要去polling task.getStatus()變成FINISHED 後,我才能使用task.get()把ret取出來。所以我就使用了while loop來做polling,不過 現在就是變成這個while loop跑不出來,造成後面的task.get()也無法使用了。 不知道大家在使用AsyncTask的時候,有沒有遇到過類似的問題呢?問了Google大神也沒 有解 囧rz -- 雜七雜八的kewang部落格 http://kewang.tw -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.3.53

06/18 23:19, , 1F
應該用observer吧
06/18 23:19, 1F

06/18 23:19, , 2F
怎麼會用polling
06/18 23:19, 2F

06/19 09:11, , 3F
就因為不知道怎麼用 Orz
06/19 09:11, 3F

06/19 09:13, , 4F
來研究看看,java不熟真的是有點困擾 XD
06/19 09:13, 4F

06/19 09:21, , 5F
請問observer是!?
06/19 09:21, 5F

06/19 11:54, , 6F
獨立寫成一個class,onPost那個先空著
06/19 11:54, 6F

06/19 11:55, , 7F
然後每個activity再寫個inner class繼承它
06/19 11:55, 7F

06/19 11:56, , 8F
只override掉onPost的函數 這樣
06/19 11:56, 8F

06/19 13:46, , 9F
樓上我以前也是有用過類似的作法,推移下
06/19 13:46, 9F

06/19 13:46, , 10F
不過多緒的東西總覺得很難切的乾淨QQ
06/19 13:46, 10F

06/19 16:18, , 11F
沒辦法...這東西就是這樣...XD
06/19 16:18, 11F

06/19 19:28, , 12F
override onPost......這我倒沒想到,不過還有更好的作法嗎
06/19 19:28, 12F

06/19 21:41, , 13F
我覺得暫時是一個好的做法囉!! 先用再說吧
06/19 21:41, 13F

06/19 21:41, , 14F
反正「重構」才是之後的重點...
06/19 21:41, 14F

06/19 21:46, , 15F
我現在就是為了重構,才要改寫這段程式 XD
06/19 21:46, 15F

06/19 23:11, , 16F
重構是不斷在進行的行為阿
06/19 23:11, 16F

06/20 23:46, , 17F
看你在onPost裡做的事有沒有相似性......
06/20 23:46, 17F

06/20 23:46, , 18F
全部不一樣的話,基本上沒什麼重構的餘地吧...
06/20 23:46, 18F

06/21 00:52, , 19F
應該是doInBG有沒有相似性吧!有才有辦法抽出superclass
06/21 00:52, 19F

06/21 00:53, , 20F
再次抱怨多緒很煩XD希望有優美的解法
06/21 00:53, 20F

06/21 18:40, , 21F
我的doInBG有幾個固定的模式,所以用switch去判斷
06/21 18:40, 21F

06/21 18:40, , 22F
onPost還有onPre,因為要顯示ProgressDialog,所以就真的是
06/21 18:40, 22F

06/21 18:41, , 23F
在UI thread用override的方式,這樣子應該也比較方便
06/21 18:41, 23F

06/21 23:32, , 24F
推樓上...另外應該是在Activity內Override而不是UIThre
06/21 23:32, 24F

06/22 00:08, , 25F
對啦,不過講UI thread好像比較專業一點 XDDD
06/22 00:08, 25F

06/22 00:27, , 26F
反正實際上onPost那個通常就是在UI Thread沒錯啊XD
06/22 00:27, 26F
文章代碼(AID): #1D_A7JaV (AndroidDev)
文章代碼(AID): #1D_A7JaV (AndroidDev)