2010-08-02 91 views
0

我目前正在开发一个程序,使用可滚动/可缩放图像作为主要用户界面。它使用由矩阵操纵的画布遍历大面积。我不想将一个超大的位图加载到内存中,而是想使用一个tile系统来加载256乘256个方块。我的问题是,当图像加载到内存时,应用程序会滞后。我使用一个简单的outer和inner for循环来加载tile,如果它们为null,并且如果用户缩小到一定程度,则tile将全部消失,并显示整个图像的较低res版本。我被引导到异步图像加载的方向,这似乎可以防止图像加载到内存时的滞后,但我不知道如何开始这个,并想知道如果任何人有任何建议如何一般异步加载位图进入画布。谢谢!异步图像加载和Android画布

回答

1

我只是使用第二个线程来做任何事情,可能需要一些时间来确保UI总是很好和响应。如果UI包含动画(如滚动)以摆脱口吃,您甚至可能想要降低该线程的优先级。

您可以使用第二个Thread对象,该对象在完成时通过Handler发送消息,或者您可以使用AsyncTask。

+0

我会考虑这两个,谢谢。一旦我有异步任务将我的位图加载到内存中并在完成后将它们加载到我的UI中,那么回收位图以避免内存不足错误的最有效方法是什么?另一个检查位图不再被查看的异步任务? – jfisk 2010-08-02 15:55:56

+1

Bitmap.recycle()加速杀死它们。除此之外,最重要的事情是确保你不再提及它们。要对静态成员非常小心,并且一定要从任何数组/列表中删除它们 - 包括指向指向这些位图的可绘制视图的数组:)。 – EboMike 2010-08-02 16:30:49

+0

awsome,非常感谢。要使用bitmap.recycle(),检测位图是否不再被查看的最佳方法是使用一个数组来记录正在绘制的位图,然后有一个for循环遍历每个位图以查看是否不等于那些价值?它的现在我有,似乎应该有一个更简单的方法来确定在屏幕上绘制的位图。 – jfisk 2010-08-02 18:24:01