我按照谷歌的指示在我的MainActivity中显示了5个大的位图,以避免内存泄漏和不冻结UI线程。
http://developer.android.com/training/displaying-bitmaps/process-bitmap.html
因此,我在onCreate方法中为我的5个大位图中的每一个启动了一个Asynctask…
我没有冻结UI线程(很好),因为我在每个线程中运行我的长进程,但“我的问题”是,这5个大的位图是同一图形(面部)的一部分,当应用程序启动时,用户可以看到不同的层是如何在不同的时间加载的。
我在启动画面中思考,直到我的图像被加载,但我想知道这是最好的方法(因为启动可能不到1秒),还是有更好的方法,比如在最后一个图像加载时通知UI线程,然后显示所有images...or可能尝试加载同一Asynctask中的所有图像
提前谢谢你,
宝拉。
发布于 2013-02-08 07:02:03
最后,我在同一个Asynctask中加载了5个大的位图。我已经将它们加载到doInBackground方法中,并在我的ASynctask的onPostExecute中一次显示所有它们。
我在想Siddharth Lele的答案,我想要这样的东西,但我知道你得到了相同的结果,从另一个异步任务的onPostExecute调用一个异步任务,并等待到最后一个异步任务来显示在doInBackground方法中执行的ImageViews唯一的一个异步任务,并等待这个异步任务的postExecute,直到所有的位图都加载完,我认为它更有效率,因为你没有更多的线程来满足你的需要……
如果这种方法还有其他考虑因素,请让我知道。
谢谢!
发布于 2013-02-08 07:59:19
在最近的Android版本中,在AsyncTask执行器线程池前面有一个出队。它一次只允许运行一个任务。这意味着您的任务按顺序执行,这通常是您所期望的。然而,在这样的情况下,这意味着您不能同时加载所有5个图像。看一看:
executeOnExecutor(Executor exec, Params... params)..。这使您可以绕过出队。这将使您获得并发性。
在我看来,来自AsyncTasks的网络连接似乎是可疑的。如果其中一个失败了怎么办?这个问题的一个更好的解决方案可能是一个多线程的绑定服务,当所有5个图像都下载完毕时,它会进行回调。
https://stackoverflow.com/questions/14749309
复制相似问题