2009-12-10 23 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不是爲了創建新的表單,而是爲了重用相同的表單會更好。