2

我想实现一个将启动 AsyncTask 的服务。

在 AsyncTask onProgressUpdate() 中,我想在主线程中更新 TableLayout。

一切都很好,但有一个疑问:我如何处理主线程已被破坏或不可见的情况?
该服务将继续,直到它 stopSelf() 这就是我想要的。
但是 AsyncTask 怎么知道不更新 TableLayout 呢?

4

2 回答 2

0

好的,当我阅读您的第二篇文章时,我对事情有了更好的理解。

这里有一个经典的生产者-消费者问题。服务的 AsyncTask 正在生成消费者(主要活动)需要显示的内容。解决方案是使用 LinkedBlockingQueue 来存储所有下载的项目。Activity 需要有自己的 AsyncTask,它将从 LinkedBlockingQueue 轮询。这是基本方法:

该服务有一个下载数据的 AsyncTask。每个项目都存储在一个无界的 LinkedBlockingQueue 中。

Activity 从 onResume 启动 AsyncTask 并从 onPause 取消它。此任务将轮询 LinkedBlockingQueue,然后显示 TableLayout 中的每个项目。

于 2012-05-30T20:46:08.230 回答
0

我认为解决方案是通过 onResume() 和 onPause() 上的消息让服务知道主 Activity 何时可见或不可见。

该服务将依次在 AsyncTak 中设置一个标志,当该标志为 false 时,onProgressUpdate() 将退出而不进行 UI 更新。

所以我想,如果我正确理解了服务文档,我的服务将必须启动-粘性并且还受相同活动的约束。我只需要弄清楚如何重新绑定正在运行的服务。

于 2012-05-31T11:32:34.140 回答