Nim*_*ims 17 android google-maps-android-api-2 supportmapfragment android-maps-v2
使用2个简单的活动.第一个Activity只包含一个按钮来启动第二个包含地图的Activity:
主要活动:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void goToMap(View view){ //This is just the onClick method for the button
Intent intent=new Intent( this, BigMapTest.class);
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
地图活动:
public class BigMapTest extends FragmentActivity {
SupportMapFragment mapFragment;
GoogleMap map;
@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
setContentView(R.layout.travel_diary_big_map);
mapFragment=(SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.big_map);
map=mapFragment.getMap();
}
Run Code Online (Sandbox Code Playgroud)
地图活动的XML布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment
android:id="@+id/big_map"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
class="com.google.android.gms.maps.SupportMapFragment"
/>
Run Code Online (Sandbox Code Playgroud)
现在当我运行这段代码时,按下按钮移动到带有地图的Activity,然后按回去进入第一个活动...然后重复这个过程,我可以看到每次堆的大小都在增加,直到达到这是限制,然后开始钳制.如果你用地图(即缩放)混乱一点,我可以在这一点上获得一个OOM异常.
01-25 16:10:13.931:D/dalvikvm(21578):GC_FOR_ALLOC释放1898K,7%空闲45859K/49187K,暂停204ms 01-25
16:10:14.671:I/dalvikvm-heap(21578):Clamp target GC堆从52.724MB到48.000MB 01-25
16:10:14.671:D/dalvikvm(21578):GC_CONCURRENT释放2534K,6%释放46554K/49187K,暂停3ms + 14ms
01-25 16:10:15.372:I/dalvikvm -heap(21578):卡箍目标GC堆从52.979MB到48.000MB
01-25 16:10:15.382:d/dalvikvm(21578):GC_CONCURRENT释放2273K,免费46815K/49187K 5%,已暂停的3ms + 15ms的
01-25 16:10:15.622:I/dalvikvm-heap(21578):Clamp目标GC堆从52.604MB到48.000MB 01-25
16:10:15.622:D/dalvikvm(21578):GC_FOR_ALLOC释放657K,6%免费46431K/49187K,暂停202ms 01-25
16:10:16.203:I/dalvikvm-heap(21578):将目标GC堆从52.959MB夹紧到48.000MB 01-25
16:10:16.203:D/dalvikvm(21578):GC_FOR_ALLOC已释放1469K,5%免费46796K/49187K,暂停217ms 01-25
16:10:16.203:I/dalvikvm-heap(21578):强制收集SoftReferences以进行278744字节分配
01-25 16:10:16.4 23:I/dalvikvm-heap(21578):Clamp目标GC堆从52.952MB到48.000MB 01-25
16:10:16.423:D/dalvikvm(21578):GC_BEFORE_OOM释放9K,5%释放46786K/49187K,暂停219ms
01-25 16:10:16.423:E/dalvikvm-heap(21578):278744字节分配的内存不足.
任何建议/帮助将不胜感激.
接近我从一些基本的MAT调查中可以看出,你看到的是由映射V2维护的下载地图数据的缓存.如果平移和缩放很多,缓存似乎会更大.如果您离开地图并稍后返回到新地图,缓存会缩小.我无法在N次启动示例应用程序的地图活动时获得N个缓存,缓存大小根据用户的行为而消失和流动.
唉,这个缓存是不可配置的,AFAIK,它有多大,什么时候被清除,它是否溢出到磁盘等等.
因此,默认情况下,您所能做的只是留出一堆健康的堆空间,供Maps V2使用,并采取措施保持在这个较小的堆子集中.
如果你想尝试,你可以尝试调用clear()上GoogleMap,或onLowMemory()在你的SupportMapFragment,看看是否有帮助减少这种高速缓存的大小.
Mar*_*ujo -1
在您的布局中使用它:
\n\n<LinearLayout\n android:id="@+id/map_container2"\n android:layout_width="match_parent"\n android:layout_height="200dp"\n android:layout_weight="35.22"\n android:orientation="horizontal" >\n\n <fragment\n android:id="@+id/map1"\n android:layout_width="match_parent"\n android:layout_height="match_parent"\n android:layout_weight="1"\n class="com.google.android.gms.maps.SupportMapFragment"\n map:cameraTargetLat="40.72"\n map:cameraTargetLng="-74.00"\n map:cameraZoom="8" />\n </LinearLayout>\nRun Code Online (Sandbox Code Playgroud)\n\n这段代码:
\n\nonCreate{\n setUpMapIfNeeded();\n}\n\nprivate void setUpMapIfNeeded() {\n // TODO Auto-generated method stub\n // Do a null check to confirm that we have not already instantiated the map.\n if (mMap == null) {\n // Try to obtain the map from the SupportMapFragment.\n mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map1))\n .getMap();\n // Check if we were successful in obtaining the map.\n if (mMap != null) {\n setUpMap();\n }\n }\n }\n\nprivate void setUpMap() {\n // TODO Auto-generated method stub\n // Hide the zoom controls as the button panel will cover it.\n mUiSettings = mMap.getUiSettings();\n // Enables/disables zoom gestures (i.e., double tap, pinch & stretch).\n mMap.getUiSettings().setZoomGesturesEnabled(false);\n// Enables/disables scroll gestures (i.e. panning the map).\n mMap.getUiSettings().setScrollGesturesEnabled(false);\n // Enables/disables the compass (icon in the top left that indicates the orientation of the\n // map).\n mMap.getUiSettings().setCompassEnabled(false);\n // Add lots of markers to the map.\n addMarkersToMap();\n\n // Pan to see all markers in view.\n // Cannot zoom to bounds until the map has a size.\n final View mapView = getSupportFragmentManager().findFragmentById(R.id.map1).getView();\n if (mapView.getViewTreeObserver().isAlive()) {\n mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {\n @SuppressLint("NewApi") // We check which build version we are using.\n @Override\n public void onGlobalLayout() {\n LatLngBounds bounds = new LatLngBounds.Builder()\n .include(WOODS)\n .build();\n if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {\n mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this);\n } else {\n mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this);\n }\n mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 50));\n }\n });\n }\n }\n\nprivate void addMarkersToMap() {\n // TODO Auto-generated method stub\n // Uses a colored icon.\n mWoods = mMap.addMarker(new MarkerOptions()\n .position(WOODS)\n .title("Woods")\n .snippet("R. Quat\xc3\xa1, 1016, Vila Olimpia - (11) 3849-6868")\n .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));\n }\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
10250 次 |
| 最近记录: |