【发布时间】: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