我是一个相对较新的 Android 开发人员,现在正在开发一个对 RESTful Web 服务进行大量调用的应用程序。
我在一个文件中进行每次调用,asyncTask
但在某些文件中,我拥有的不同异步任务的数量接近 15 个。现在我将它们全部作为我的活动类中的私有类。我怎样才能更好地组织它们(即把它们放在单独的文件中),同时仍然能够更新 UI。我正在考虑将它们传递给context
每个构造函数,asyncTask
但我只是想知道是否有最佳实践/更好的方法。
谢谢!
我是一个相对较新的 Android 开发人员,现在正在开发一个对 RESTful Web 服务进行大量调用的应用程序。
我在一个文件中进行每次调用,asyncTask
但在某些文件中,我拥有的不同异步任务的数量接近 15 个。现在我将它们全部作为我的活动类中的私有类。我怎样才能更好地组织它们(即把它们放在单独的文件中),同时仍然能够更新 UI。我正在考虑将它们传递给context
每个构造函数,asyncTask
但我只是想知道是否有最佳实践/更好的方法。
谢谢!
将 Activity 作为构造函数参数传入对我来说听起来是一个不错的计划。当您将它们声明为内部类时,基本上会发生同样的情况。
但请记住,使用 AsyncTasks 加载数据有一些缺点。一旦启动,它们将继续运行,即使活动已经关闭并持有对您的活动的引用(因此不能被垃圾收集)。
您可能想研究其他概念,例如加载器。
考虑使用库来简化您的代码库。我编写了droidQuery,除其他外,它可用于简化AsyncTask
s。例如,JSON
要从中获取数据example.com
,并在之后访问上下文,您可以这样做:
$.ajax(new AjaxOptions().url("http://www.example.com")
.context(this)
.type("GET")
.dataType("json")
.success(new Function() {
@Override
public void invoke($ droidQuery, Object... params) {
JSONObject json = (JSONObject) params[0];
Context context = droidQuery.context();
//TODO:
}
})
.error(new Function() {
@Override
public void invoke($ droidQuery, Object... params) {
AjaxError error = (AjaxError) params[0];
Log.e("Ajax", "Error " + error.status + ": " + error.reason);
}
}));
对于您经常调用的大量不同请求,您还可以创建实例以AjaxOptions
供以后使用,这些实例具有不同的 URL、类型、数据类型等:
Map<String, AjaxOptions> requests = new HashMap<String, AjaxOptions>();
//add the example above:
requests.put("example", new AjaxOptions().url("http://www.example.com")
.context(this)
.type("GET")
.dataType("json")
.success(new Function() {
@Override
public void invoke($ droidQuery, Object... params) {
JSONObject json = (JSONObject) params[0];
Context context = droidQuery.context();
//TODO:
}
})
.error(new Function() {
@Override
public void invoke($ droidQuery, Object... params) {
AjaxError error = (AjaxError) params[0];
Log.e("Ajax", "Error " + error.status + ": " + error.reason);
}
}));
稍后,只需通过调用执行此任务:
$.ajax(requests.get("example"));
我建议你使用这个库,而不是为不同类型的 asynctask 使用这么多类
你可以看看这里
http://loopj.com/android-async-http/
您的代码将变得非常少,而不是声明可能 asynctask 单独编写大量代码,您只需使用 4 行代码
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
System.out.println(response);
}
});
我非常有效率地很快得到响应。
我希望这会帮助你。:)