首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在J2ME中加载图像?

在J2ME中加载图像?
EN

Stack Overflow用户
提问于 2009-05-28 09:09:35
回答 3查看 2K关注 0票数 2

我对J2ME上的概念并不陌生,但我有点懒:最近我的应用程序把图片像糖果一样加载到内存中……

代码语言:javascript
复制
Sprite example = new Sprite(Image.createImage("/images/example.png"), w, h);

我不确定这是不是最好的方式,但它在我的摩托罗拉Z6上运行良好,直到昨晚,我在一部旧的三星手机上测试了这个应用程序,图像甚至无法加载,并且需要多次尝试启动线程才能显示出来。屏幕是白色的,所以我意识到这一定是关于图像加载的事情,我做得不是很好……有没有人可以告诉我如何在我的应用程序中正确地创建加载例程?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-28 21:06:04

我不确定您到底在寻找什么,但是您所描述的行为听起来非常像您正在经历一个OutOfMemory异常。尝试减少图像的维度(堆使用量基于维度),并查看行为是否停止。这将让您知道这是否真的是OutOfMemory问题或其他问题。

其他提示:

  1. 从大到小加载图像。这有助于堆碎片,并允许为最大的图像提供最大的堆空间。
  2. 卸载(设置为null)的顺序与加载和垃圾收集的顺序相反。确保在调用GC之后使用Thread.yield()。
  3. 确保只加载所需的图像。从应用程序不再处于的状态卸载图像。
  4. 由于您正在创建子画面,因此一个图像可能有多个子画面。考虑创建一个映像池,以确保只加载一次映像。然后,只需将每个Sprite对象指向它所需的池中的图像。您的问题中的示例似乎很可能会多次将同一图像加载到内存中。这是浪费,可能是OutOfMemory问题的一部分。
票数 4
EN

Stack Overflow用户

发布于 2009-06-04 10:52:40

使用胶片图像(在一个图像中具有定义尺寸的一组图像),并使用逻辑将它们逐个提取出来。

因为它们被分组到一个图像中,所以您可以节省每个图像的标题空间,从而可以减少内存使用。

该技术首先在MIDP1.0内存受限设备中使用。

票数 1
EN

Stack Overflow用户

发布于 2009-05-29 00:14:27

使用Fostah方法不反复加载图像,我创建了以下类:

代码语言:javascript
复制
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;
    }
}

因此,每当我需要一个镜像时,我首先向池请求它,或者只是将它加载到池中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/919917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档