看板 AndroidDev 關於我們 聯絡資訊
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
nvidia:應該用observer吧 06/18 23:19
nvidia:怎麼會用polling 06/18 23:19
kewang:就因為不知道怎麼用 Orz 06/19 09:11
kewang:來研究看看,java不熟真的是有點困擾 XD 06/19 09:13
tomap41017:請問observer是!? 06/19 09:21
coronach:獨立寫成一個class,onPost那個先空著 06/19 11:54
coronach:然後每個activity再寫個inner class繼承它 06/19 11:55
coronach:只override掉onPost的函數 這樣 06/19 11:56
tomap41017:樓上我以前也是有用過類似的作法,推移下 06/19 13:46
tomap41017:不過多緒的東西總覺得很難切的乾淨QQ 06/19 13:46
coronach:沒辦法...這東西就是這樣...XD 06/19 16:18
kewang:override onPost......這我倒沒想到,不過還有更好的作法嗎 06/19 19:28
tomap41017:我覺得暫時是一個好的做法囉!! 先用再說吧 06/19 21:41
tomap41017:反正「重構」才是之後的重點... 06/19 21:41
kewang:我現在就是為了重構,才要改寫這段程式 XD 06/19 21:46
nvidia:重構是不斷在進行的行為阿 06/19 23:11
coronach:看你在onPost裡做的事有沒有相似性...... 06/20 23:46
coronach:全部不一樣的話,基本上沒什麼重構的餘地吧... 06/20 23:46
tomap41017:應該是doInBG有沒有相似性吧!有才有辦法抽出superclass 06/21 00:52
tomap41017:再次抱怨多緒很煩XD希望有優美的解法 06/21 00:53
kewang:我的doInBG有幾個固定的模式,所以用switch去判斷 06/21 18:40
kewang:onPost還有onPre,因為要顯示ProgressDialog,所以就真的是 06/21 18:40
kewang:在UI thread用override的方式,這樣子應該也比較方便 06/21 18:41
tomap41017:推樓上...另外應該是在Activity內Override而不是UIThre 06/21 23:32
kewang:對啦,不過講UI thread好像比較專業一點 XDDD 06/22 00:08
coronach:反正實際上onPost那個通常就是在UI Thread沒錯啊XD 06/22 00:27