我通过3个并行的AsyncTask并行下载三个JSON对象:
dictAsync1Task = new DictAsyncTask(DictionaryLookUp.this, "Jishoo");
dictAsync1Task.execute();
dictAsync2Task = new DictAsyncTask(DictionaryLookUp.this, "Systran");
dictAsync2Task.execute();
dictAsync3Task = new DictAsyncTask(DictionaryLookUp.this, "Tatoeba");
dictAsync3Task.execute();
任务完成后,我想在我的TabLayout中刷新ListView(嘿,当我提出问题时,如何在命令周围获得那些很酷的灰色背景矩形?)。
有没有办法知道我目前在哪个asyncTasks'onPostExecute?即我想通过'switch'刷新listView,检查我是否在dictAsync1 / 2 / 3Task的onPostExecute中。
(我实际上通过简单地在AsyncTask中使用全局变量找到了更好的解决方案,但我仍然很好奇是否有办法按照我描述的方式)
答案 0 :(得分:0)
您必须使用task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
进行并行执行。
如果这些异步类是静态的,那么您必须将回调或弱引用(以避免内存泄漏)传递给活动。转发下载的数据,其类型为onPostExecute
,然后仅刷新相关的标签列表。
原型可以是void refreshData(Object data,String type);
您可以在数据中传递不同类型的arraylist,因为它是对象。你可以稍后检查这个
if(data != null && ((ArrayList<?>)data).size() > 0)
{
if(((ArrayList<?>)data).get(0) instanceof MyType)
{
// do stuff
}
}
或启用类型,然后像data
mTab1Data = ((ArrayList<MyType>)data)
并检查活动是否仍然存在。也许在异步完成之前使用退出应用程序。