0

我按照这个 Google 说明在我的 MainActivity 中显示 5 个大位图,以避免内存泄漏并且不冻结 UI 线程。

http://developer.android.com/training/displaying-bitmaps/process-bitmap.html

所以,我Asynctask在方法中为我的 5 个大位图中的每一个开始一个onCreate...

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

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

提前致谢,

保拉。

4

2 回答 2

0

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

我正在考虑 Siddharth Lele 的答案,我想要类似的东西,但我知道你得到了相同的结果,从另一个 Asynctask 的 onPostExecute 调用一个 Asynctask 并等待最后一个 Asynctask 显示在 doInBackground 方法中执行它的 ImageViews只有一个 Asynctask 并等待这个 Asynctask 的 postExecute 直到所有位图都被加载,我认为它更有效,因为你没有更多你需要的线程......

让我知道这种方法是否还有其他考虑因素。

谢谢!

于 2013-02-07T23:02:03.410 回答
0

在最近的 Android 版本中,AsyncTask 执行器线程池前面有一个出队。它一次只允许一个任务运行。这意味着您的任务按顺序发生,这通常是您所期望的。但是,在这种情况下,这意味着您不会同时加载所有 5 张图像。看一下:

executeOnExecutor(Executor exec, Params... params)

...这使您可以绕过出队。这将使您获得并发性。

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

于 2013-02-07T23:59:18.860 回答