Java Android两个异步任务串行或并行执行?-第二个是冻结,但结果是好的
我在Android应用程序中运行两个AsyncTask任务,它们来自同一个类,但参数不同。例如:Java Android两个异步任务串行或并行执行?-第二个是冻结,但结果是好的,java,android,android-asynctask,progress-bar,Java,Android,Android Asynctask,Progress Bar,我在Android应用程序中运行两个AsyncTask任务,它们来自同一个类,但参数不同。例如: new myAsynckTask(a,b,c).execute(); new myAssyncTask(a,d,e).execute(); 它们是并行执行还是串行执行?我这样问是因为当第一个开始时,显示执行的进度,当完成时,我看到第二个需要更多时间来完成,但我看不到进度(我可以看到矩形,但进度条没有显示20%……等等)。这就像冻结,但结果是好的 我想做的是以串行顺序运行它们,并能够看到它们两个的进
new myAsynckTask(a,b,c).execute();
new myAssyncTask(a,d,e).execute();
它们是并行执行还是串行执行?我这样问是因为当第一个开始时,显示执行的进度,当完成时,我看到第二个需要更多时间来完成,但我看不到进度(我可以看到矩形,但进度条没有显示20%……等等)。这就像冻结,但结果是好的
我想做的是以串行顺序运行它们,并能够看到它们两个的进度。
我在Android Jelly Bean 4.2.2 API级别17上运行该应用程序
它们是并行执行还是串行执行
如果您的android:targetSdkVersion
为13或更高版本,并且您运行的是android 3.2或更高版本的设备,则它们将被串行执行
如果你在安卓1.5上运行,它们将被串行执行
否则,它们将并行执行
您可以通过将execute()
替换为executeOnExecutor(AsyncTask.THREAD\u POOL\u EXECUTOR)
来选择并行执行
有关更多信息,请参阅的“执行顺序”部分。您的问题的答案是:这完全取决于您在哪个版本的Android上运行此功能,这是我在多个应用程序中遇到的一个巨大问题 如果您想了解如何正确运行它们,请查看更新:从Yazazzello复制并由Yazazzello发起 “此类在API级别26.0.0-alpha1中被弃用。请使用AsyncTask 直接。” 您应该将其用于并行执行:
AsyncTaskCompat.executeParallel(new AsyncTask<Param, Void, Data>() {
@Override
protected Data doInBackground(Param... params) {
return downloader.getData(params[0]);
}
@Override
protected void onPostExecute(Data response) {
processData(response);
}
}, param);
AsyncTaskCompat.executeParallel(新的AsyncTask(){
@凌驾
受保护的数据doInBackground(参数…参数){
返回downloader.getData(参数[0]);
}
@凌驾
受保护的void onPostExecute(数据响应){
过程数据(响应);
}
},param);
“AsyncTaskCompat”此类在API级别26.0.0-alpha1中被弃用。直接使用异步任务。