【发布时间】:2015-08-05 15:00:14
【问题描述】:
对于我的应用,我为所有对外部 API 的网络调用创建了一个框架。我将所有内容都放在“服务”中,例如:UserService、MessageService 等。所以现在当我想调用网络方法时,我无法在我的Activity 的 UI 线程中执行此操作,所以我做了一个 @987654326 @ 一切都很好 =)
但现在我想要将执行方法提供给AsyncTask,因此我不需要为我的网络框架的每个方法编写AsyncTask。所以不要有这样的东西:
public class NetworkTask extends AsyncTask<UserService, Void, Void> {
@Override
protected Void doInBackground(UserService... params) {
UserService userService = params[0];
userService.getUser();
return null;
}
}
我想要更“抽象”的东西,所以AsyncTask 不需要知道“getUser”方法?但我找不到任何关于如何做到这一点的想法......也许 AsyncTask 无论如何都不适合这个?
【问题讨论】:
-
我不太清楚你在问什么,但
IntentService通常用作AsyncTask的替代品 -
我也不确定我是否理解正确,但是 AsyncTask 的替代品是加载器,实际上你应该更喜欢它们。 developer.android.com/guide/components/loaders.html
-
是的,很抱歉,我不知道如何正确表达这一点,所以搜索网络也没有帮助。我想再次解释一下:在“doInBackground”方法中,我不想显式调用“userService.getUser”,因为还有许多其他方法和服务可以进行网络调用,而且我无法在 Main 上执行它们/UI 线程我需要例如一个异步任务。但我只想为每种网络方法设置一个 AsyncTask...
-
您可以创建自己的界面并将其传递给您的 Generic
Asynctask。我建议您检查 Retrofit form square 或 google 的 Volley 进行网络操作,根据本文instructure.github.io/blog/2013/12/09/volley-vs-retrofit,它们的网络操作速度更快 -
嗯,我不明白如何使用我的网络框架来实现这一点(这个框架只会知道所有的 url 并在 nice Objects 中解析 JSON 以返回到我的 android 应用程序)跨度>
标签: android android-asynctask frameworks