2009-12-10 4 views
1

Я делаю приложение Java ME для Symbian S60 5th edition, и у меня проблема с памятью. После некоторого времени запуска приложения я получаю исключение из памяти. Я получаю изображения с Карт Google (встроенным GPS в Nokia 5800) и показывая их.Java ME из памяти

Я это реализовано так:

  • класса MIDlet с методом setForm()
  • класса Data, который имеет резьбу, которая собирает информацию о координатах, получает изображение из Google карты, создает новую форму, дописывает изображение и вызывает метод setForm(f) от Midlet.

Возможно, Display.setCurrent(Form f) содержит ссылки на формы, и так память быстро заполняется. Я пробовал с Canvas, но у него есть какой-то тупой пользовательский интерфейс (какой-то круг и несколько кнопок), который мне не нравится.

Как я могу решить эту проблему?

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, поэтому я пришел к выводу, что могу пролонгировать жизнь приложения, будучи аггрессивным с предоставлением ресурсов, все ненужные переменные = null all vector.clear(), когда это не нужно. .. VM был IBM J9, который не был чем-то серьезным вообще, но он каким-то образом функционировал. –

+0

Проблема решена. Я обнаружил, что его возможная виртуальная клавиатура на Canvas, поэтому я использовал canvas, и я также поместил все ссылки на mapImage = null. Итак, теперь все в порядке с памятью. Спасибо всем за помощь, Милан Дойчиновский – Milan

ответ

1

Вы сохраняя ссылки на формы или образа? Они не позволят им собирать мусор и будут вызывать ошибки из памяти.

Трудно сказать без какого-либо исходного кода. Во всяком случае, будет лучше перепроектировать ваш Мидлет, чтобы не создавать новые формы, а повторное использование одного и того же.