惯用AsyncTask的朋友可能会发现AsyncTask的坑:
Android executes AsyncTask
tasks before Android 1.6 and again as of Android 3.0 in sequence by default.
即:Android从3.0开始,AsyncTask为顺序执行方式。这种顺序方式指的是,所有的使用AsyncTask的类均会在应用中排一个序,按顺序执行!
这就导致有时候发现AsyncTask迟迟得不到执行被莫名其妙得delay了,是因为其他的AsyncTask还没执行完!
是不是很坑爹?
解决方式:
1、换用Thread+handler或者runonuithread的方式。
2、使用AsyncTask中的
You can tell Android to run it in parallel with the usage of the executeOnExecutor()
method, specifyingAsyncTask.THREAD_POOL_EXECUTOR
as first parameter.
样例:
// ImageLoader extends AsyncTask
ImageLoader imageLoader = new ImageLoader(imageView);
// Execute in parallel
imageLoader.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "http://url.com/image.png");
参考:
http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html
http://stackoverflow.com/questions/4068984/running-multiple-asynctasks-at-the-same-time-not-possible