运行并行AsyncTask
我在我的应用程序中有一个SplashActivity,当我启动我的应用程序时,使用AsyncTask做一些事情。
我还创build了另一个从服务器下载数据的AsyncTask。 现在closures我的应用程序后,AsyncTask仍在下载数据。
但是当我再次启动我的应用程序时,我的SplashActivity的AsyncTask不会执行它的背景(doInBackground函数),直到我的下载程序AsyncTask完成,并且我的应用程序被挂起。
所以我的问题是,我们不能运行两个AsyncTask并行? 这两个AsyncTask是不同的,做自己的东西。 有没有办法做到这一点。
您将需要使用thread pool Executor
来执行AsyncTask
。 默认实现使用在单个线程上运行的串行执行程序
所以创build一个ThreadPoolExecutor然后使用
AsyncTask的executeOnExecutor而不是只是执行方法
AsyncTask从Honeycomb版本发生了一些变化。 旧版本有一个10线程的线程池,所以你可以并行运行10个任务。 但是对于Honeycomb,默认情况下是一个串行执行程序,它可以逐个执行任务。 但是你可以传递一个ThreadPoolExecutor
来执行:
if (Build.VERSION.SDK_INT >= 11) { //--post GB use serial executor by default -- task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } else { //--GB uses ThreadPoolExecutor by default-- task.execute(); }
另一个select是从支持v.4库使用AsyncTaskCompat 。
AsyncTaskCompat.executeParallel(new AsyncTask<Void, Void, Object>() { @Override protected Object doInBackground(Void... params) { // do your parallel task here return null; } @Override protected void onPostExecute(Object result) { // and fetch result } });