4

我们是否必须从 UI 线程启动和执行 asyctask。如果我使用 asynctask 从非 ui 线程进行 Web 服务访问(长时间运行)是否正确。对不起,如果我的查询是错误的。

在我的应用程序中,我必须运行大约 10 个 Web 服务,并且必须在 ui 上显示结果。我很困惑哪种方法是好的异步任务、意图服务或为每个 Web 服务调用创建线程并使其并行运行。

4

3 回答 3

2

为了使 AsyncTask 正常工作,必须遵循一些线程规则:

  1. AsyncTask 类必须在 UI 线程上加载。这是从 JELLY_BEAN 自动完成的。

  2. 任务实例必须在 UI 线程上创建。

  3. 必须在 UI 线程上调用 execute(Params...)。

  4. 不要手动调用 onPreExecute()、onPostExecute(Result)、doInBackground(Params...)、onProgressUpdate(Progress...)。

  5. 该任务只能执行一次(如果尝试第二次执行将引发异常。)

    更多详细信息

在我个人看来,我建议使用 AsyncTask,因为它针对运行后台任务和利用多核处理器等优势进行了高度优化。

于 2013-01-23T19:00:09.513 回答
0

是的,asynctask 需要从 UI 线程运行。

我建议使用多个线程/runnables。您还需要在主活动类中实现一个处理程序来收听来自线程的响应。

于 2013-01-23T18:58:49.580 回答
0

您可以使用线程或异步任务。AsyncTask 为您提供在启动后台任务之前和完成后台任务或获取其进度之后管理 Ui 更改方法的方法。

这取决于您的架构要求。

于 2013-01-23T19:01:09.880 回答