Joã*_* G. 9 multithreading android http download httpclient
我正在开发一个需要同时下载多个文件的应用程序.我正在为每个文件创建一个AsyncTask自己HttpClient的文件,但是下一个文件只在上一个文件完成后才开始下载.
可能是服务器端问题?
Mar*_*ski 20
这是因为Honeycomb中的AsyncTask管理发生了变化.以前,如果您启动了3个AsyncTasks,它们会同时运行.从HC开始,如果你targetSdk设置为12或更高,这些是排队并逐个执行(参见本讨论).要通过这种方式开始使用AsyncTasks:
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
Run Code Online (Sandbox Code Playgroud)
代替:
task.execute(params);
Run Code Online (Sandbox Code Playgroud)
如果您还定位旧的Androids,则需要条件代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
} else {
task.execute(params);
}
Run Code Online (Sandbox Code Playgroud)
或将其包装在单独的帮助器类中:
public class Utils {
public static <P, T extends AsyncTask<P, ?, ?>> void executeAsyncTask(T task) {
executeAsyncTask(task, (P[]) null);
}
@SuppressLint("NewApi")
public static <P, T extends AsyncTask<P, ?, ?>> void executeAsyncTask(T task, P... params) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
} else {
task.execute(params);
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法是:
Utils.executeAsyncTask( new MyAsyncTask() );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4633 次 |
| 最近记录: |