从服务启动Android AsyncTask

时间:2012-05-30 19:47:15

标签: android service android-asynctask

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

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

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

2 个答案:

答案 0 :(得分:0)

好的,当我读到你的第二篇文章时,我更了解事情。

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

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

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

答案 1 :(得分:0)

我认为解决方案就是通过onResume()和onPause()上的消息来了解主要Activity是否可见时知道服务。

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

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