Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么异步任务线程一个接一个地运行?_Android_Sdk - Fatal编程技术网

Android 为什么异步任务线程一个接一个地运行?

Android 为什么异步任务线程一个接一个地运行?,android,sdk,Android,Sdk,我将许多后台操作(如web访问和DB操作)卸载到异步任务中,以使我的应用程序运行得更快。它部分工作,因为UI没有挂起。但应用程序仍然需要很长时间才能解决(即完成后台任务) 在查看logcat时,我注意到所有后台任务(AsyncTask)都一个接一个地运行。没有并发。如何编写一个真正的多线程应用程序?阅读AsyncTask的文档,您可以看到Android确实在一个线程中运行所有非主线程任务。请参阅中的“执行顺序” 但是你也有一个解决方案:与线程池执行器一起使用。如果你不想等到一个线程完成,你应该在

我将许多后台操作(如web访问和DB操作)卸载到异步任务中,以使我的应用程序运行得更快。它部分工作,因为UI没有挂起。但应用程序仍然需要很长时间才能解决(即完成后台任务)


在查看logcat时,我注意到所有后台任务(AsyncTask)都一个接一个地运行。没有并发。如何编写一个真正的多线程应用程序?

阅读AsyncTask的文档,您可以看到Android确实在一个线程中运行所有非主线程任务。请参阅中的“执行顺序”


但是你也有一个解决方案:与线程池执行器一起使用。

如果你不想等到一个线程完成,你应该在线程中完成你的后台工作。AsyncTask线程总是一个接一个地运行。如果只是为了运行一个长任务,那么Xjasz,你是对的。但是我使用这些(简短的)异步任务来更新UI。我对后端运行许多查询和计算(获取图像、更新统计信息等),这些查询和计算彼此独立地更新UI。为此,您有异步任务。谷歌决定序列化所有后台任务的事实并不是因为它是一个更好的平台设计,而是因为它打破了许多遗留应用程序。现在,当普通手机有4个内核,达到8个时,安卓伪装了有用的AsyncTask功能真是太可惜了。那你有什么问题?如果您想从线程更新ui,只需创建一个处理程序或RunOnUI。在尝试更新UI时,我总是对AsncTask感到恼火。自从我学会了如何处理和Rununui它使我的生活更容易。如果您愿意,我可以提供一个简单的方法。在某些情况下,生成一个后台线程,并偶尔调用runOnUiThread是一个很好的做法。但是在其他一些情况下,如果任务彼此不相关,异步任务就很方便了。我不想在这个问题中涵盖所有的设计模式,只是想详细说明AsyncTask——我仍然觉得它很方便:——)