我在我的MainActivity中显示5个大型位图,遵循此Google说明,以避免内存泄漏而不冻结UI线程。
http://developer.android.com/training/displaying-bitmaps/process-bitmap.html
所以,我在Asynctask
方法中为我的5个大型位图中的每一个开始一个onCreate
...
我没有冻结UI线程(好),因为我在一个线程中运行我的长进程,但“我的问题”是这5个大型位图是同一个图(face)的一部分,当应用程序启动后,用户可以看到在不同时间如何加载不同的图层。
我想在启动画面中直到我的图像被加载但是我想知道这是否是最好的方法(因为需要的飞溅可能不到1秒)或者有更好的方法,就像在加载最后一个图像时通知UI线程然后显示所有图像......或者尝试加载同一个Asynctask
中的所有图像?
提前致谢,
Paola的。
答案 0 :(得分:0)
最后,我在相同的Asynctask中加载了5个大型Bitmaps。我已经在doInBackground方法中加载它们并在我的ASynctask的onPostExecute中一次显示所有这些。
我正在考虑Siddharth Lele的答案,我想要这样的东西,但我知道你得到了相同的结果从另一个Asynctask的onPostExecute调用一个Asynctask并等待最后的Asynctask显示在其中执行它的ImageViews doInBackground方法是唯一一个Asynctask并等待这个Asynctask的postExecute直到所有的Bitmaps被加载,我认为它更有效,因为你没有更多的线程,你需要的...
如果对此方法有其他考虑,请告诉我。
谢谢!
答案 1 :(得分:0)
在Android的最新版本中,AsyncTask执行程序线程池前面有一个出列队列。它只允许一次运行一个任务。这意味着您的任务按顺序发生,这通常是您所期望的。但是,在这种情况下,这意味着您不同时加载所有5个图像。看看:
executeOnExecutor(Executor exec, Params... params)
...允许你绕过出队。这将使你获得并发。
来自AsyncTasks的网络连接对我来说似乎很可疑。如果其中一个失败怎么办?解决此问题的更好方法可能是多线程绑定服务,在下载所有5个映像时进行回调。