gpt4 book ai didi

java - 使用 osmdroid 泄露 IntentReceiver 异常

转载 作者:行者123 更新时间:2023-12-01 09:55:03 28 4
gpt4 key购买 nike

我的 Android 应用程序中有一个 MapActivity,它使用 osmdroid(Open Street Map for Android 库)显示 map 。

当我在此 MapActivity 中并转到另一个 Activity 时,我总是遇到异常,并且我无法理解如何避免它,因为我认为它与库内完成的某些操作有关。正如您在下面的日志中看到的,它发生在销毁 MapActivity 之后

05-18 17:34:31.117  27073-27073/com.fpricoco.etip I/﹕ Classe 'MapActivity'  ----  'onDestroy()'  ----  Stato: Distrutta
05-18 17:34:31.157 27073-27073/com.fpricoco.etip E/ActivityThread﹕ Activity com.fpricoco.etip.Activities.MapActivity has leaked IntentReceiver org.osmdroid.tileprovider.modules.MapTileFileStorageProviderBase$MyBroadcastReceiver@43d85f60 that was originally registered here. Are you missing a call to unregisterReceiver()?
android.app.IntentReceiverLeaked: Activity com.fpricoco.etip.Activities.MapActivity has leaked IntentReceiver org.osmdroid.tileprovider.modules.MapTileFileStorageProviderBase$MyBroadcastReceiver@43d85f60 that was originally registered here. Are you missing a call to unregisterReceiver()?
at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:792)
at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:593)
at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1151)
at android.app.ContextImpl.registerReceiver(ContextImpl.java:1138)
at android.app.ContextImpl.registerReceiver(ContextImpl.java:1132)
at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:365)
at org.osmdroid.tileprovider.util.SimpleRegisterReceiver.registerReceiver(SimpleRegisterReceiver.java:21)
at org.osmdroid.tileprovider.modules.MapTileFileStorageProviderBase.<init>(MapTileFileStorageProviderBase.java:34)
at org.osmdroid.tileprovider.modules.MapTileFileArchiveProvider.<init>(MapTileFileArchiveProvider.java:57)
at org.osmdroid.tileprovider.modules.MapTileFileArchiveProvider.<init>(MapTileFileArchiveProvider.java:76)
at org.osmdroid.tileprovider.MapTileProviderBasic.<init>(MapTileProviderBasic.java:63)
at org.osmdroid.tileprovider.MapTileProviderBasic.<init>(MapTileProviderBasic.java:41)
at org.osmdroid.tileprovider.MapTileProviderBasic.<init>(MapTileProviderBasic.java:34)
at org.osmdroid.views.overlay.MinimapOverlay.<init>(MinimapOverlay.java:114)
at com.fpricoco.etip.Activities.MapActivity.onCreate(MapActivity.java:303)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2034)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2095)
at android.app.ActivityThread.access$600(ActivityThread.java:137)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:4791)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
at dalvik.system.NativeStart.main(Native Method)

在 Google 上搜索时,我发现我必须“unregisterReceiver(yourReceiver)”,重点是我的代码中没有设置任何“yourReceiver”,我认为这是在库内完成的。

我也找到了这个解决方案“https://groups.google.com/forum/#!topic/osmdroid/wDEvFpWfTIU”,但我不明白如何分离

最后我也尝试了这种方式,但是没有成功:

// .. get custom tiles off the screen
myMapView.getOverlays().remove(mMinimapOverlay);
// .. release all custom tiles' bitmaps
myMapView.getTileProvider().clearTileCache();
// .. unregister intent receiver
myMapView.getTileProvider().detach();

我导入的库是:

compile 'org.osmdroid:osmdroid-android:5.1@aar'

在我的 gradle.build 文件中。

最佳答案

试试这个:

@Override
public void onDestroy() {
myMapView.onDetach();
myMapView.getTileProvider().clearTileCache();
}

关于java - 使用 osmdroid 泄露 IntentReceiver 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37304905/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com