我对J2ME中存在的概念并不陌生,但我不应该以某种方式懒惰: 最近我的应用程序一直在将图像加载到内存中,因为它们是糖果......
Sprite example = new Sprite(Image.createImage("/images/example.png"), w, h);
而且我不确定它是最好的方式,但它在我的摩托罗拉Z6中运行良好,直到昨晚,当我在一台旧的三星手机中测试应用程序时,图像甚至无法加载并需要多次尝试启动出现的线程。屏幕保留为白色,所以我意识到它必须是关于图像加载的东西,我做得不好......有没有人可以告诉我如何在我的应用程序中正确地进行加载例程? / p>
答案 0 :(得分:4)
我不确定您到底在寻找什么,但您所描述的行为听起来就像是在遇到OutOfMemory异常。尝试减少图像的尺寸(堆使用基于维度)并查看行为是否停止。这将告诉您它是否真的是OutOfMemory问题或其他问题。
其他提示:
答案 1 :(得分:1)
使用胶片图像(一张图像中定义尺寸的一组图像)并使用逻辑将它们一次拉出一个。
因为它们被分组为一个图像,所以每个图像都保存标题空间,因此可以减少使用的内存。
这种技术最初用于MIDP 1.0内存受限设备。
答案 2 :(得分:0)
使用Fostah方法不反复加载图像,我做了以下课程:
public class ImageLoader {
private static Hashtable pool = new Hashtable();
public static Image getSprite(String source){
if(pool.get(source) != null) return (Image) pool.get(source);
try {
Image temp = Image.createImage(source);
pool.put(source, temp);
return temp;
} catch (IOException e){
System.err.println("Error al cargar la imagen en "+source+": "+e.getMessage());
}
return null;
}
}
所以,每当我需要一个图像时,我首先会向池中询问它,或者只是将它加载到池中。