高德地图内存泄露LocationManager$GnssStatusListenerTransport.mGnssCallback

在使用高德地图的时候,喜提了一个内存泄露:

┬───
│ GC Root: Global variable in native code
│
├─ android.location.LocationManager$GnssStatusListenerTransport instance
│    Leaking: UNKNOWN
│    Retaining 588 B in 3 objects
│    ↓ LocationManager$GnssStatusListenerTransport.mGnssCallback
│                                                  ~~~~~~~~~~~~~
├─ com.loc.h$1 instance
│    Leaking: UNKNOWN
│    Retaining 12 B in 1 objects
│    Anonymous subclass of android.location.GnssStatus$Callback
│    ↓ h$1.a
│          ~
├─ com.loc.h instance
│    Leaking: UNKNOWN
│    Retaining 197 B in 4 objects
│    z instance of com.lu.code.main.DetailConfigActivity with mDestroyed
│    = true
│    ↓ h.z
│        ~
╰→ com.lu.code.main.DetailConfigActivity instance
​     Leaking: YES (ObjectWatcher was watching this because com.lu.code.
​     main.DetailConfigActivity received Activity#onDestroy() callback and
​     Activity#mDestroyed is true)
​     Retaining 694.8 kB in 7703 objects
​     key = 8e2c9606-0df8-4e92-9e21-0d4d3d5ca64e
​     watchDurationMillis = 5660
​     retainedDurationMillis = 618
​     mApplication instance of com.lu.code.App
​     mBase instance of androidx.appcompat.view.ContextThemeWrapper

METADATA

Build.VERSION.SDK_INT: 29
Build.MANUFACTURER: Xiaomi
LeakCanary version: 2.8.1
App process name: com.lu.code
Count of retained yet cleared: 3 KeyedWeakReference instances
Stats: LruCache[maxSize=3000,hits=50801,misses=111621,hitRate=31%]
RandomAccess[bytes=6638804,reads=111621,travel=40796300256,range=26287634,size=3
0953215]
Analysis duration: 9785 ms

兄弟们仔细看,杂么漏着漏着,到FrameWork层了,奇葩。android.location.LocationManager$GnssStatusListenerTransport instance

但其实,这个

            AMapLocationClient.updatePrivacyShow(context, true, true);
            AMapLocationClient.updatePrivacyAgree(context, true);
            mLocationClient = new AMapLocationClient(context);
            mLocationClientOption = new AMapLocationClientOption();

mLocationClient = new AMapLocationClient(context);
问题出在这儿,传了Activity当作context,导致的泄露。改为ApplicationContext 即可规避

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
作者intuit,代码LocationManager。 INTULocationManager可以轻松获取设备在iOS上的当前位置和标题。 它是一个Objective-C库,在Swift中也很有用。 INTULocationManager提供基于块的异步API,以便一次或连续地请求当前位置。 它在内部管理多个同时位置和标题请求,每个一次性位置请求可以指定其自己所需的准确度和超时持续时间。 当第一个请求进入时,INTULocationManager会自动启动位置服务,并在所有请求完成后立即停止位置服务,同时动态管理位置服务所消耗的功率,以减少对电池寿命的影响。 CLLocationManager有什么问题? CLLocationManager要求您手动检测和处理权限,陈旧/不准确的位置,错误等内容。 CLLocationManager使用更传统的委托模式而不是现代的基于块的回调模式。虽然它可以很好地跟踪用户位置随时间的变化(例如用于逐向导航),但是正确请求单个位置更新(例如确定用户当前城市以获取天气)非常麻烦预测,或从当前位置自动填充地址)。 INTULocationManager可以轻松地同时或连续请求设备的当前位置以及设备的连续标题。对于一次性位置请求和定期更新的定期订阅,API非常简单。对于一次性位置请求,您可以指定所需位置的准确程度,以及您愿意等待多长时间。还支持重要的位置变更监控。 INTULocationManager具有高能效,可通过自动确定和使用最有效的核心位置精度设置,以及在不再需要位置服务(例如GPS或指南针)时自动断电,从而节省设备的电池电量。
com.miui.frameworks.servicestests (1 Test) [1/1] com.android.server.location.gnss.hal.Gpo4ClientTest#init: FAILED (141ms) STACKTRACE: java.lang.SecurityException: uid 10289 does not have android.permission.ACCESS_COARSE_LOCATION or android.permission.ACCESS_FINE_LOCATION. at android.os.Parcel.createExceptionOrNull(Parcel.java:3011) at android.os.Parcel.createException(Parcel.java:2995) at android.os.Parcel.readException(Parcel.java:2978) at android.os.Parcel.readException(Parcel.java:2920) at android.location.ILocationManager$Stub$Proxy.registerLocationListener(ILocationManager.java:1291) at android.location.LocationManager.requestLocationUpdates(LocationManager.java:1551) at android.location.LocationManager.requestLocationUpdates(LocationManager.java:1234) at android.location.LocationManager.requestLocationUpdates(LocationManager.java:1199) at com.android.server.location.gnss.hal.Gpo4Client.registerPassiveLocationUpdates(Gpo4Client.java:198) at com.android.server.location.gnss.hal.Gpo4Client.init(Gpo4Client.java:78) at com.android.server.location.gnss.hal.Gpo4ClientTest.init(Gpo4ClientTest.java:209) ... 8 trimmed Caused by: android.os.RemoteException: Remote stack trace: at com.android.server.location.LocationPermissions.enforceLocationPermission(LocationPermissions.java:116) at com.android.server.location.LocationManagerService.registerLocationListener(LocationManagerService.java:786) at android.location.ILocationManager$Stub.onTransact(ILocationManager.java:582) at android.os.Binder.execTransactInternal(Binder.java:1285) at android.os.Binder.execTransact(Binder.java:1249)
最新发布
06-01

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值