【发布时间】:2016-05-24 12:46:53
【问题描述】:
在我的 Android 应用程序中,我每 10 秒调用一次服务器请求,并使用标记更新地图中的结果(创建位图,我的标记具有图像和文本)。我使用Android map utils library 创建我的布局的位图,这工作正常,但一段时间后我的力量关闭了内存不足的问题。
Note:
My marker has image and text like a layout.
its updates with dynamic result by every 10 seconds.
我使用了library中的两个主要类
1.BubbleDrawable 2.IconGenerator,我已经使用这两个类来创建我的布局的位图。
在我的地图活动中,我每 10 秒调用一次库并使用自定义标记刷新地图。
代码:
public class MainActivity extends Activity{
private IconGenerator icGen ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
icGen = new IconGenerator(this);
serverResponse(); // this method call every 10 seconds
} // onCreate ends here.
void updateResult(String placeName){
markerPin = googleMap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(icGen.makeIcon(placeName))) // dynamic name
.position(markerLatLng).anchor(0.5f, 1.0f)); // I got out of memory exception here
....
googleMap.addMarker(markerPin);
}
void serverResponse(){
JSONArray arr = new JSONArray(serverResponse);
for(int i=0;i<all.length();i++){
name = arr.getJSONObject.getStrig(name);
updateResult(name);
}
}
}
我不知道如何解决这个问题,请帮助我。
【问题讨论】:
-
您是在不再需要标记时删除标记,还是继续添加新标记而不删除旧标记?
-
每次从服务器获取新数据时,我都会检查旧数据和新数据,如果发现任何地方的修改,那么我将删除旧标记并创建新位图并用作标记,未更改的地方标记不会被删除。
-
那么我会说您的
OutOfMemory是由于在您的地图中保留了大量标记造成的。您真的不需要维护地图中的所有标记(这会破坏性能),您只需要显示可见的标记。例如,您可以删除所有标记 (map.clear()) 并在onCameraChange事件中添加可见标记。为此,您需要维护一个结构来存储您从服务中下载的位置,并检查这些位置是否在可见视口中。 -
您能否提供示例以显示可见区域的标记并将标记隐藏到不可见区域?
标签: android google-maps bitmap android-memory