我有一个片段,onViewCreated
启动AsyncTask,在后台加载一些数据,在onPostExecute
中,它将数据加载到ArrayAdapter
,以显示在列表中UI。
现在onResume
我需要加载一些需要在后台线程中加载的其他数据。所以我可以使用启动AsyncTask。
第二个后台任务从另一个数据源加载一些其他数据。
问题:加载这些数据后,在完成处理之前,我需要从ArrayAdapter
AsyncTask
访问onViewCreated
中加载的数据。
考虑到:
1)我不应该从非UI线程访问ArrayAdapter
和
2)我无法确定AsyncTask
onViewCreated
已经完成(我最近被告知AsyncTasks实际上是一个接一个地运行)
如何修复我的设计以使其有效?
请注意,加载的数据onViewCreated
远远超过加载的数据onResume
,所以我不希望在每个简历上重新加载它们
答案 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%。