我正在为Symbian S60第5版制作Java ME应用程序,我的内存有问题。运行应用程序一段时间后,我收到了内存不足异常。 我正在从Google地图(通过诺基亚5800中的集成GPS)获取图像并显示它们。
我的实现方式如下:
MIDlet
setForm()
Data
,其中包含一个线程,用于收集有关坐标的信息,从Google地图获取图片,创建新表单,附加图片,并从setForm(f)
调用方法Midlet
可能Display.setCurrent(Form f)
会在表单上保留引用,这样内存就会快速完整。
我尝试使用Canvas
,但它有一些我不喜欢的愚蠢UI(一些圆圈和一些4个按钮)。
我该如何解决这个问题?
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();
}
}
答案 0 :(得分:1)
您是否保留对表格或图片的引用?这些将使它们不被垃圾收集,并将导致内存不足错误。
没有一些源代码很难分辨。无论如何,重新构建您的Midlet不是为了创建新表单,而是重用相同的表单。