Я делаю приложение 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: код ...
В классе
MIDlet
public void setInfo(Form f) { getDisplay().setCurrent(f); }
в классе
TouristData
, который собирает информацию о местоположении и получает изображение картыprivate attributes: private Form f=null; private ImageItem imageItem=null; private Image img = null;
метод
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(); } }
У меня была схожая проблема, мой sw работал на Palm T3, поэтому я пришел к выводу, что могу пролонгировать жизнь приложения, будучи аггрессивным с предоставлением ресурсов, все ненужные переменные = null all vector.clear(), когда это не нужно. .. VM был IBM J9, который не был чем-то серьезным вообще, но он каким-то образом функционировал. –
Проблема решена. Я обнаружил, что его возможная виртуальная клавиатура на Canvas, поэтому я использовал canvas, и я также поместил все ссылки на mapImage = null. Итак, теперь все в порядке с памятью. Спасибо всем за помощь, Милан Дойчиновский – Milan