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