Java ME内存不足

时间:2009-12-10 14:44:56

标签: memory-management java-me

我正在为Symbian S60第5版制作Java ME应用程序,我的内存有问题。运行应用程序一段时间后,我收到了内存不足异常。 我正在从Google地图(通过诺基亚5800中的集成GPS)获取图像并显示它们。

我的实现方式如下:

    使用方法MIDlet
  • setForm()
  • Data,其中包含一个线程,用于收集有关坐标的信息,从Google地图获取图片,创建新表单,附加图片,并从setForm(f)调用方法Midlet

可能Display.setCurrent(Form f)会在表单上保留引用,这样内存就会快速完整。 我尝试使用Canvas,但它有一些我不喜欢的愚蠢UI(一些圆圈和一些4个按钮)。

我该如何解决这个问题?

PS:代码......

  1. 课程MIDlet

    public void setInfo(Form f)
    {
        getDisplay().setCurrent(f);
    }
    
  2. 在班级TouristData
  3. 收集有关位置的信息并获取地图图像

    private attributes:
        private Form f=null;
        private ImageItem imageItem=null;
        private Image img = null;
    
  4. 接收新位置时调用的方法locationUpdated

    public void locationUpdated(LocationProvider provider,final Location location)
    {
        if (!firstLocationUpdate)
        {
            firstLocationUpdate = true;
            statusListener.firstLocationUpdateEvent();
        }
    
        if(touristUI != null)
        {
            new Thread()
            {
                public void run()
                {
                    if(location != null && location.isValid())
                    {
                        //lokacija je, prikaži!
                        try
                        {
                            QualifiedCoordinates coord =location.getQualifiedCoordinates();
                            if(imageItem == null)
                            {
                                imageItem = new ImageItem(null,null,0,null);
                                imageItem.setAltText("ni povezave");
                                f.append(imageItem);
                            }
                            else
                            {
                                img =  googleConnector.retrieveStaticImage2(360,470, coord.getLatitude(), coord.getLongitude(), 16, "png32"); //z markerje
                                imageItem.setImage(img);
                            }
                        }catch(Exception e)
                        {}
                    }
                    else
                    {
                    }
                }
            }.start();
        }
    }
    

1 个答案:

答案 0 :(得分:1)

您是否保留对表格或图片的引用?这些将使它们不被垃圾收集,并将导致内存不足错误。

没有一些源代码很难分辨。无论如何,重新构建您的Midlet不是为了创建新表单,而是重用相同的表单。