osmdroid中为何显示空地图

最近想搞一下Osmdroid,发现官方demo中显示地图的基本功能都无法实现。按照官网demo,地图上都是灰色格子。而下载了OpenStreetMapViewer源码,在AS中竟然可以显示地图,并且Manifest.xml中对于permission的配置也是一样的。原因(官网上其实也讲了):对于6.0以上的需要进行WRITE_EXTERNAL_STORAGED permission的许可。于是乎测试了一下4.3,api18,同样的代码果然可以显示地图。转回来看了下OpenStreetMapViewer源码,发现其竟然又检查了一边WRITE_EXTERNAL_STORAGED 。于是乎,copy一下checkpermission()函数,加入onCreate函数,代码如下:

final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS=124;

private void checkPermissions(){

Stringmessage="osmdroid permissions:";

Stringstorage="no Storage access to store maptiles.";

if(Build.VERSION.SDK_INT>=23){//api 22应该也是同样的问题

List<String>permissions=newArrayList<>();

if(ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){

Log.d(message,storage);

permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);

String[]params=permissions.toArray(newString[permissions.size()]);

requestPermissions(params,REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);

}//else:Wealreadyhavepermissions,sohandleasnormal

Log.d(message,storage);

}

}

果然,久违的地图出现了。解决这个问题过程中发现,国内的资料实在是少,对于我等小白真是困难重重。



OSMDroid 是一个开源的 Android 地图库,它允许开发者在 Android 应用程序嵌入 OpenStreetMap 数据和地图功能。与原生 Google Maps API 不同,OSMDroid 是基于轻量级的 OSM 数据,这意味着它可以提供更好的离线地图支持,并且对隐私更加友好。 防止内存泄露(Memory Leaks)是 Android 开发非常重要的一环,特别是在处理地图相关组件时,因为地图数据加载和绘制可能会占用大量内存。以下是一些避免 OSMDroid 防止内存泄露的方法: 1. **及时释放资源**:确保每次不再使用地图视图(MapView)、图层(Overlay)或数据源(TileProvider)时,调用相应的 `dispose()` 或 `removeAllOverlays()` 方法释放它们。 2. **使用弱引用**:对于持有地图对象的引用,可以考虑使用 WeakReference,这样即使其他强引用消失,弱引用也不会阻止垃圾回收。 3. **监听生命周期**:地图视图的 `OnDestroy()` 或 `onSaveInstanceState()` 方法,记得清除地图相关的回调和监听器,以防止内存泄漏。 4. **批处理操作**:尽量减少在主线程执行耗时的操作,如绘制大图层或加载大量数据,可以使用异步任务或者 `AsyncTask` 来处理。 5. **使用 LruCache**:对于频繁访问但占用间较大的地图数据,可以使用 LruCache 来缓存,当内存不足时自动清理最久未使用的数据。 6. **跟踪内存使用**:利用 Android 的内存分析工具(如 Android Studio 的 Memory Profiler 或第三方库如 LeakCanary)定期检查应用内存状况,找出可能的泄漏点。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值