繁体   English   中英

如何使多个Android AsyncTask同时运行?

[英]How to make more than one Android AsyncTask run at the same time?

OK,所以我有一个Android应用程序,该应用程序在mainactivity上加载的片段上具有列表视图。 列表视图包含一个imageview,它通过适配器从设备外部存储中加载了图像,该适配器又调用了一个称为BackgroundImageLoader的AsyncTask对象。 在这一点上,如果我运行我的应用程序,则一切正常,并且图像几乎立即显示。 为了提供有关该过程的更多详细信息。...在列表视图的适配器的bindView方法上,我调用一个方法,该方法调用以下内容:

BackgroundImageLoader loader = new BackgroundImageLoader(photoID, imageView); 
loader.execute();

现在,当我使上述代码完美运行后,我编写了一些逻辑来“清除旧照片”。 此逻辑放在名为AutoPurgePhotos_Task的AsyncTask对象中。 基本上,我想在应用程序启动时运行一次任务,但我只希望它在后台运行,以免干扰UI。 我尝试从Applications onCreate()方法的后端启动它,并且尝试从MainActivity的onCreate()方法启动它。 结果是清除逻辑运行并完美运行。 而且,尽管它在后台运行,但除了BackgroundImageLoader AsyncTask之外,我的UI似乎也可以正常使用。 在自动清除任务完成之前,所有照片都不会开始显示。 甚至为了证明它与我在任务中所做的事情无关,我注释掉了所有业务逻辑,只是让任务处于休眠状态。

public class AutoPurgePhotos_Task  extends AsyncTask<Void, Void, Void> {

public AutoPurgePhotos_Task() {
    super();
}

@Override
protected Void doInBackground(Void... params) {

    SystemClock.sleep(10000);
    return null ;
}
}

附带说明一下,我的应用程序中还有其他asynctask,除非此初始asynctask完成,否则它们也不会运行。 好像一次只运行一个异步任务。 同样,在异步任务运行时,UI线程中的所有其他代码似乎都在运行并且工作正常。 似乎一次只能运行一个异步任务。

这是我启动自动清除任务的方式...

AutoPurgePhotos_Task task = new AutoPurgePhotos_Task();
task.execute();

我再次尝试从几个不同的区域启动它,无论我在哪里/如何启动它,另一个asynctask都将等到完成后再运行。 感谢你给与我的帮助。

使用executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)而不是execute() 引用AsyncTask文档

如果您确实想要并行执行,则可以使用THREAD_POOL_EXECUTOR调用executeOnExecutor(java.util.concurrent.Executor,Object [])。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM