作者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