Android异步任务一个接一个
我有一个现有的代码,其中有一个异步任务用于某些请求-响应。 在post-execute方法中,它将解析的数据设置为一些db 现在我需要修改这段代码,以便在应用程序启动时,一个接一个地下载数据。 i、 e.我需要执行任务A,然后在其完全完成时(即使数据已设置),我需要启动任务B,以此类推,大约12个任务 注意:在开始下一个任务之前,我还需要完成“后执行” 我不知道该怎么做。Android异步任务一个接一个,android,parsing,soap,android-asynctask,download,Android,Parsing,Soap,Android Asynctask,Download,我有一个现有的代码,其中有一个异步任务用于某些请求-响应。 在post-execute方法中,它将解析的数据设置为一些db 现在我需要修改这段代码,以便在应用程序启动时,一个接一个地下载数据。 i、 e.我需要执行任务A,然后在其完全完成时(即使数据已设置),我需要启动任务B,以此类推,大约12个任务 注意:在开始下一个任务之前,我还需要完成“后执行” 我不知道该怎么做。 请建议。您可以使用myAsyncTask.executeOnExecutor(串行执行器) 现在执行顺序为a->b->c 实
请建议。您可以使用
myAsyncTask.executeOnExecutor(串行执行器)
现在执行顺序为a->b->c 实施取决于您的需求
doInBackground()
中下载并保存数据,并在onPostExecute()中下载并保存更新
doInBackground()
中循环中的所有数据,并将数据仅保存在db中,最后只调用一次onPostExecute()
Thread
注意:
执行顺序将是串行的,仅在蜂巢的上方是并行的。下面是并行的。这个有点乱
使用配置AsyncTask将强制串行执行后台逻辑,
也就是说,doInBackground()调用中包含的逻辑。
SERIAL_EXECUTOR不保证何时调用onPostExecute()
在串行执行器模式下执行一组异步任务可能会导致任务a的onPostExecute()
在任务B的doInBackground()之后执行
如果后一个需求对您的系统不重要,只需使用SERIAL_EXECUTOR即可
但是,如果是这样的话,您将需要以一种强制的方式更改您的体系结构
这样的要求
一种方法如下:
class MyAsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// do background work
return null;
}
@Override
protected void onPostExecute(Void args) {
// update UI here
new MyNextAsyncTask.execute(..); // <---------- start next task only after UI update has completed
}
}
希望有帮助。理论上很简单,创建一个扩展AsyncTask的类,创建它们的实例列表,并在post execute中执行每一个。您不能在“Task a”的ONPOST execute中创建“Task B”并开始执行它吗?不可以。因为此任务以后可能会再次调用,要刷新值,实际上我无法正确使用它。我尝试搜索正确的用法…但运气不好。如果有任何有用的链接,我们将不胜感激。如何从所有异步任务中获取回调,是否已完成?
class MyAsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// do background work
return null;
}
@Override
protected void onPostExecute(Void args) {
// update UI here
new MyNextAsyncTask.execute(..); // <---------- start next task only after UI update has completed
}
}
new Thread() {
ConditionVariable mCondition = new ConditionVariable(false);
void run() {
do_A();
runonUIThread(updateAfter_A_Runnable);
mPreviewDone.block(); // will be release after updateAfterA_Runnable completes!
do_B();
runonUIThread(updateAfter_B_Runnable);
mPreviewDone.block(); // will be release after updateAfter_B_Runnable completes!
etc..
}
}