Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 在我的MainActivity中运行多个异步任务_Android_Bitmap_Android Asynctask - Fatal编程技术网

Android 在我的MainActivity中运行多个异步任务

Android 在我的MainActivity中运行多个异步任务,android,bitmap,android-asynctask,Android,Bitmap,Android Asynctask,我在MainActivity中显示了5个大位图,遵循谷歌的说明,以避免内存泄漏,而不是冻结UI线程 因此,我在onCreate方法中为我的5个大位图中的每一个启动一个Asynctask 我没有冻结UI线程(好),因为我在一个线程中运行我的长进程,但“我的问题”是,这5个大位图是同一个图形(面)的一部分,当应用程序启动时,用户可以看到不同层在不同时间的加载情况 在加载图像之前,我一直在闪屏上思考,但我想知道这是最好的方法(因为闪屏可能需要不到1秒),还是有更好的方法,比如在加载最后一个图像时通知

我在MainActivity中显示了5个大位图,遵循谷歌的说明,以避免内存泄漏,而不是冻结UI线程

因此,我在
onCreate
方法中为我的5个大位图中的每一个启动一个
Asynctask

我没有冻结UI线程(好),因为我在一个线程中运行我的长进程,但“我的问题”是,这5个大位图是同一个图形(面)的一部分,当应用程序启动时,用户可以看到不同层在不同时间的加载情况

在加载图像之前,我一直在闪屏上思考,但我想知道这是最好的方法(因为闪屏可能需要不到1秒),还是有更好的方法,比如在加载最后一个图像时通知UI线程,然后显示所有图像……或者尝试在同一个
Asynctask
中加载所有图像

提前感谢,


Paola。

最后,我在同一个任务中加载了5个大位图。我已经在doInBackground方法中加载了它们,并在ASynctask的onPostExecute中一次显示所有这些

我在考虑Siddharth Lele的答案,我想要这样的答案,但我知道,从另一个Asynctask的onPostExecute调用一个Asynctask并等待到最后一个Asynctask以显示ImageView,在doInBackground方法中这样做是唯一的一个Asynctask并等待在加载所有位图之前执行此异步任务,我认为这样更有效,因为您没有更多需要的线程

如果这种方法还有其他考虑因素,请告诉我


谢谢

在Android的最新版本中,AsyncTask executor线程池前面有一个出列。它一次只允许运行一个任务。这意味着你的任务按顺序进行,这通常是你所期望的。但是,在这种情况下,这意味着您没有同时加载所有5个图像。看看:

executeOnExecutor(Executor exec, Params... params)
。。。这允许您绕过出列。这将使您获得并发性


异步任务的网络连接对我来说似乎是可疑的。如果其中一个失败了怎么办?这个问题的更好解决方案可能是一个多线程绑定服务,它在下载了所有5个图像后进行回调

在加载之前,您必须提供进度。看看这个API,它的使用非常简单:我假设,很自然,您将在每个单独的
AsyncTask
中以各自的
onPostExecute()
显示下载的位图。为什么不在每个
onPostExecute()
中调用下一个
AsyncTask
,保存位图并在最终的
AsyncTask
中显示它们?这样,位图将一次可见。这是我最想做的事。我在一个应用程序中这样做,在这个应用程序中,我获取“标题”的数据,然后加载“注释”,并在“注释”的
AsyncTask
中一起显示它们。只是不要忘记在需要时取消任务,并在服务器(或连接)出现问题时设置超时。甚至在启动asyncTask之前,您也可以检查连接。仅对于记录,我没有从网络下载位图。仅使用一些选项(如Android指南)从参考资料中解码,如下所述: