我的onResume依赖于`onViewCreated`。我该如何重新设计呢?

时间:2016-04-23 09:34:02

标签: java android multithreading android-fragments android-asynctask

我有一个片段,onViewCreated启动AsyncTask,在后台加载一些数据,在onPostExecute中,它将数据加载到ArrayAdapter,以显示在列表中UI。
现在onResume我需要加载一些需要在后台线程中加载的其他数据。所以我可以使用启动AsyncTask。
第二个后台任务从另一个数据源加载一些其他数据。

问题:加载这些数据后,在完成处理之前,我需要从ArrayAdapter AsyncTask访问onViewCreated中加载的数据。
考虑到:
1)我不应该从非UI线程访问ArrayAdapter和 2)我无法确定AsyncTask onViewCreated已经完成(我最近被告知AsyncTasks实际上是一个接一个地运行)
如何修复我的设计以使其有效? 请注意,加载的数据onViewCreated远远超过加载的数据onResume,所以我不希望在每个简历上重新加载它们

1 个答案:

答案 0 :(得分:0)

您可以通过拨打AsyncTask来查看.getStatus()的状态,看看是否已完成(AsyncTask.Status.FINISHED)。至于从asyncTask内部访问适配器,您需要使用onProgressUpdate,这是在每次更新任务时触发的,或者如果您没有更新进度,它可以包含在{ {1}}喜欢这样:

Runnable

不同之处在于,如果您的代码类似于下载图像或文件,那么它将在循环内运行,每次读取n个字节。您可以拨打//Inside doInBackground runOnUiThread(new Runnable() { public void run() { //Your logic } }); 来触发publishProgress(Progress...)方法并向用户显示反馈,如下载50%。