【问题标题】:AsyncTask over Multiple Activities?多个活动的异步任务?
【发布时间】:2011-03-23 05:33:38
【问题描述】:

大家好,我在这方面只能找到 1 个主题,它并没有真正回答我的问题,所以我问自己。

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

我还看到其他人推荐启动一项服务。这样做有什么好处?谢谢!

~斯科特

【问题讨论】:

    标签: android service android-activity android-asynctask


    【解决方案1】:

    这正是使用服务的情况。 AsyncTask 用于在 UI 线程上执行操作(实际上是一个便利类)。

    您正在做的事情应该在服务中继续,因为您不必关心 UI 线程,因为您不会在同一个活动中显示。

    这是你应该如何做的:

    1) 创建服务并处理 RSS 提要 2) 在服务内您应该使用 ContentResolver 将结果存储在数据库中 3) 让 ListActivity 中的 ListAdapter 在服务更新时侦听同一 CONTENT_URI 上的更改。这将在添加或删除行时自动更新您的列表,没有任何 ANR,因为它都在后台线程上

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

    【讨论】:

    • Runor,为了做到这一点,我可以只使用 ContentResolver,还是必须自己制作 ContentProvider?有什么地方我可以看到你所说的一个很好的例子吗?我一直在阅读不同书籍中的不同内容,但运气不佳。有什么方法可以为我指明正确的方向吗?
    • 我真的很推荐看这个。有点冗长,但是一旦你完成了,你就会真正明白该怎么做:youtube.com/watch?v=xHXn3Kg2IQE
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 2012-08-14
      相关资源
      最近更新 更多