Je crée une application Java ME pour Symbian S60 5ème édition et j'ai des problèmes avec la mémoire. Après un certain temps d'exécution de l'application, je reçois l'exception de mémoire insuffisante. Je reçois des images de Google Maps (par le GPS intégré dans le Nokia 5800) et je les montre.Java ME mémoire insuffisante
Je possède ce mis en œuvre comme ceci:
- classe
MIDlet
avec la méthodesetForm()
- classe
Data
qui a un fil qui recueille les informations sur les coordonnées, obtient l'image de Google Maps, crée une nouvelle forme, ajoute le image, et appelle la méthodesetForm(f)
à partir duMidlet
.
Probable que le Display.setCurrent(Form f)
conserve des références sur les formulaires et, ainsi, la mémoire est rapidement saturée. J'ai essayé avec Canvas
mais il a une interface utilisateur stupide (un cercle et quelques 4 boutons) que je n'aime pas.
Comment puis-je résoudre ce problème?
PS: le code ...
En classe
MIDlet
public void setInfo(Form f) { getDisplay().setCurrent(f); }
en classe
TouristData
qui collecte des informations sur la localisation et obtient l'image de carteprivate attributes: private Form f=null; private ImageItem imageItem=null; private Image img = null;
méthode
locationUpdated
dont je s appelé quand recieve nouvel emplacement: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(); } }
J'ai eu un problème similaire, mon sw fonctionnait sur Palm T3, donc ce que je concluais, je pouvais prolonger la vie de l'application en étant agressif avec les ressources de location, toutes les variables inutiles = null tout vector.clear() quand inutile. .. VM était IBM J9 qui n'était pas quelque chose de sérieux du tout, mais il fonctionnait en quelque sorte. –
Le problème est résolu. J'ai trouvé que c'est possible le clavier virtuel sur Canvas donc j'ai utilisé canvas, et j'ai aussi mis toutes les références sur mapImage = null. Alors maintenant tout est ok avec la mémoire. Merci à tout le monde pour l'aide, Milan Dojčinovski – Milan