通过捆绑发送 AsyncTask

Posted

技术标签:

【中文标题】通过捆绑发送 AsyncTask【英文标题】:Sending AsyncTask through bundle 【发布时间】:2017-05-27 06:37:39 【问题描述】:

我想通过一个包发送一个 AsyncTask 来启动另一个片段。

因此,我创建了另一个实现可序列化并存储我的 AsyncTask 的类。我想把这个类放到一个包中,并用它开始另一个片段。

public class SerializableTask implements Serializable 

    private AsyncTask task;

public SerializableTask(AsyncTask task) 
    this.task = task;


    public AsyncTask getTask()  return this.task; 

这行得通还是我需要覆盖 writeObject 或 readobject 方法?

【问题讨论】:

发送 asyncTask 是什么意思?是否要将任务发送到另一个 Fragment 执行? 是的。例如,片段 A 创建任务并使用我的类对其进行序列化,并使用包含我的类和任务的包启动片段 B。然后B运行任务 为什么不创建任务并在片段 B 中运行呢?如果您可以传达片段,我认为这是更好的解决方案。只需在启动时将所需的数据发送到 Fragment B。 此外,由于第一个的速度,在 android 中最好使用 Parcelable 而不是 Serializable。 但应该是通用片段。我认为几乎不可能将通用对象发送到片段。除此之外,如果我设法将属性发送到片段 B,因为它应该是通用的,所以 Java 中没有办法告诉异步任务的后执行方法应该做什么,对吧? 【参考方案1】:

您使用的方法不正确。只需通过捆绑而不是任务发送数据,然后使用相同的数据重新创建任务。捆绑包仅用于传递数据。如果需要,您可以以数据的形式发送任务的状态,并在实现时以相同的状态重新启动任务。

【讨论】:

但是如何重新创建“doInBackground”、“onProgressUpdate”和“onPostExecute”方法? 只用旧数据创建新任务 我想我错过了一些东西..如果我的项目中有多个 AsyncTasks 并且 Frag A 创建其中一个并将数据提供给 Fragment B,那么 Fragment B 怎么知道要重新创建哪个任务,因为我可以先发送 AsyncTaskA,过一会儿我可以发送 AsyncTaskB(它们都是由其他片段创建的,都应该在 FragmentB 中执行)

以上是关于通过捆绑发送 AsyncTask的主要内容,如果未能解决你的问题,请参考以下文章

具有多个入口点的 Webpack watch() - 为未更改的文件发送捆绑包?

如何通过 GCM.send 在包中发送整数、布尔值

链路聚合(链路捆绑)

Android - 在不同apk上的服务之间传递可序列化或可打包的捆绑包

公开通过 webpack 捆绑的 javascript 全局变量

应用捆绑如何影响应用更新大小