【发布时间】:2012-06-01 20:44:58
【问题描述】:
我只是在学习 AsyncTask,想将它用作一个单独的类,而不是一个子类。
例如,
class inetloader extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String response = "";
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(urls[0]);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(
new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
@Override
protected void onPostExecute(String result) {
Log.e("xx",result);
// how do I pass this result back to the thread, that created me?
}
}
和主(ui)线程:
inetloader il = new inetloader();
il.execute("http://www.google.com");
//il.onResult()
//{
///do something...
//}
谢谢!
【问题讨论】:
-
是的,你可以把它放在一个单独的类中,但大多数人不这样做,因为如果它是一个内部类,它的目的通常会更清楚。如果您要在很多活动中重复使用它,请继续。
-
我计划将它用于不同的目的,比如如果我从这里调用它,结果它应该这样做,如果我从那里调用它,结果它应该做其他事情......因此,如果我将它保留在同一个类中并让它在结果上调用该类中的一个函数,我将不得不为它必须在结果上执行的每种操作创建一个新的 AsyncTask ...
-
使用接口,只需通过一个接口实现你的activity,并在Asyn类的onPostExcute()中调用mContext.implementedMethod()。
-
将它放在单独的类中也有助于版本控制和变更管理。
-
顺便说一句,请以大写字母开头你的类名,例如“InetLoader”——只是基本的 Java 约定。
标签: java android android-asynctask