2011-03-23 31 views
2

嘿家伙,我只能找到1线程,它并没有真正回答我的问题,所以我要求自己。AsyncTask over Multiple Activities?

我的应用程序正在下载和解析一个rss文件,我显然决定在后台任务中这样做。我选择了AsyncTask,我试图让它开始下载,然后调出rss提要的列表视图。在那里,我希望来自其他活动的AsyncTask在加载它时将现在分析的信息传递给新的列表视图活动。我不知道如何将引用传递给我的AsyncTask对象到我的新活动,而不实现parcelable并将其添加到捆绑包中,这将是一个巨大的混乱,我认为。有一个更好的方法吗?

我也见过其他人推荐开始一项服务。这样做有什么好处?谢谢!

〜斯科特

回答

9

这正是使用服务的情况。一个AsyncTask用于在UI线程(一个便利的类)上做事情。

你在做什么应该继续在服务中,因为你不一定会关心UI线程,因为你不会在同一个活动中显示。

这里是你如何去这样做:

1)创建服务,做RSS提要 2)的处理服务里面你应该存储在与ContentResolver的数据库搜索结果 3)让ListActivity中的ListAdapter监听与服务更新相同的CONTENT_URI上的更改。这会自动更新您的列表,因为行被添加或删除,没有任何ANR,因为它全部在后台线程上。

其他一些优点是,您可以在后台进行同步,而无需打开UI。这可能对RSS应用程序非常有用,因为您并不总是希望等待用户启动同步。

+0

Runor,为了做到这一点,我可以只使用ContentResolver,还是必须经历制作自己的ContentProvider的麻烦?有什么地方可以看到你正在谈论的一个很好的例子吗?我从不同的书中读了不同的东西,没有多少运气。任何方式,你可以指出我在正确的方向? – spierce7 2011-04-27 23:48:21

+3

我真的很推荐看这个。这有点冗长,但一旦完成,您就会明白要做什么:http://www.youtube.com/watch?v=xHXn3Kg2IQE – runor49 2011-05-03 21:58:16

0

调用异步任务并将RSS源下载到静态ArrayList中,并使用该arrayList通过使用自定义适配器更新第一个活动。然后在需要此Rss源的其他类中执行相同的操作。