在我的一项活动中,我使用 FusedLocationProviderClient 来获取不断的位置更新。我的代码基于这种方法:https ://developer.android.com/training/location/receive-location-updates
在我的 onCreate 中,我设置了提供程序和回调
// setup fused location provider
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
// build location request
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(30000);
mLocationRequest.setFastestInterval(10000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setSmallestDisplacement(50);
// Setup the callback function.
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult == null) {
return;
}
for (Location location : locationResult.getLocations()) {
// Update UI with location data
// ...
mCurrentLocation = location;
}
}
};
在 onResume
mFusedLocationProviderClient.requestLocationUpdates(mLocationRequest,
mLocationCallback,
Looper.myLooper());
在 onPause
mFusedLocationProviderClient.removeLocationUpdates(mLocationCallback);
然而由于某种原因,leak canary 仍然表明存在内存泄漏。泄漏金丝雀日志如下所示
浏览堆栈溢出,有些帖子似乎表明泄漏是由于 google play 服务造成的。但是那些帖子在谈论 fusedLocationApi,而我正在使用 fusedLocationProviderClient,所以我不确定它是否与我在这里使用的相同。有人可以为我确认吗?谢谢!