【问题标题】:AsyncTask chaining in Activity (callback?)Activity 中的 AsyncTask 链接(回调?)
【发布时间】:2014-06-12 22:05:20
【问题描述】:

我正在尝试将几个 AsyncTask 类链接到一个 Activity 中,一旦它们全部完成(成功),它将显示另一个 Activity。目前我将它们与彼此的 onPostExecute() 方法链接起来,但我不喜欢这样,因为它在某种程度上不必要地耦合了实现。

例如,我有我的ImportVideoActivity,用户输入要下载的 YouTube 网址。为此,我有两个 AsyncTask 类:

  • YouTubeVideoInfoTask :获取视频元数据信息以及枚举可用的视频格式(质量和编解码器)。
  • YouTubeVideoDownloadTask :根据视频信息元数据中的 URL 执行视频下载。

我希望ImportVideoActivity 首先执行YouTubeVideoInfoTask 来枚举视频质量并选择最好的。之后,它应该执行 YouTubeVideoDownloadTask 并在完成后使用下载的视频启动 CropVideoActivity

如何在ImportVideoActivity 中优雅地链接这两个AsyncTask 类?是否有某种侦听器/回调允许我监视这些任务何时完成并在不使用AsyncTask.onPostExecute() 方法的情况下启动下一个任务?

【问题讨论】:

  • 由于第二个任务取决于第一个任务的结果,你为什么不在一个AsyncTask 中执行这两个任务?
  • 虽然您认为第二个测试的 URL 是第一个任务返回的一部分是正确的,但它们可以独立完成。例如,在代码的另一部分,我可能想简单地获取视频详细信息,如标题、持续时间、作者等......而不下载。只是我的“清洁代码”方面不喜欢不必要的耦合。
  • 在这种情况下,我可能会将每个部分的代码放入 POJO 助手的方法中以实现可重用性。
  • 其中一些是,AsyncTask 部分实际上只是获取元数据或视频文件本身的HTTLURLConnection
  • 好的,此时您可以只定义一个AsyncTask 并将参数传递给doInBackground,它定义它是否应该执行methodA,然后执行methodB,或者其中一个。我对侦听器/回调方法的问题是它依赖于传入(并持有)ActivityContext。如果设备旋转,Activity 将被销毁并使用新的Context 重新创建。

标签: java android android-asynctask


【解决方案1】:

是的。在您的活动中使用回调侦听器。一旦调用它,您就可以从您的 Activity 启动新的 AsyncTask。

我的其他答案中的示例:How to return an object from the asynctask to the main class in android

【讨论】:

  • 谢谢!我会试一试,我什至可以让它通用! :)
猜你喜欢
  • 2020-05-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多