2009-12-10 49 views
1

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

我有这个实现是这样的:

  • MIDlet与方法setForm()
  • Data具有收集有关的坐标信息的线,从谷歌地图获取图像,创造了新的形式,追加图像,并从Midlet调用方法setForm(f)

可能的Display.setCurrent(Form f)保留表单上的引用,并且像这样内存变得快满了。 我试着用Canvas但它有一些愚蠢的UI(有的圆,有的4个按钮),我不喜欢。

我怎样才能解决这个问题?

PS:代码...

  1. 在类MIDlet

    public void setInfo(Form f) 
    { 
        getDisplay().setCurrent(f); 
    } 
    
  2. TouristData类收集关于位置信息和获取的地图图像

    private attributes: 
        private Form f=null; 
        private ImageItem imageItem=null; 
        private Image img = null; 
    
  3. 方法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(); 
        } 
    } 
    
+0

我有类似的问题,我是SW在Palm T3运行,所以我的结论,我可以通过被aggresive与让资源prolonge应用程序的生命,所有不需要的变量= NULL的所有vector.clear()时,没有必要的。虚拟机是IBM J9,它根本不是什么严肃的东西,但它以某种方式运作。 – 2009-12-10 14:51:32

+0

问题解决了。我发现它可能是Canvas上的虚拟键盘,因此我使用了画布,并且还将所有参考放在了mapImage = null上。所以现在它的一切都与内存相符。 感谢大家的帮助, 米兰Dojčinovski – Milan 2009-12-11 19:09:35

回答

1

你保持的形式或图像的引用?这些将使他们不被垃圾收集,并会导致内存不足的错误。

这是很难说没有一些源代码。无论如何,重构MIDlet不是为了创建新的表单,而是为了重用相同的表单会更好。