我有一个activity
,它扩展了一个称为class
的基本LocationAwareActivity
,所有LocationAwareActivity
activity
所做的就是创建位置服务客户端LocationServices.getFusedLocationProviderClient
和listens
到
位置更新。
此 Activity 的来源在这里
https://github.com/snijsure/MultiActivity/blob/master/app/src/main/java/com/example/subodhnijsure/multiactivity/LocationAwareActivity.java
当 Activity 被销毁时,它将调用removeLocationUpdates
。我发现的是
removeLocationUpdate
返回始终返回不成功的activity
进行垃圾收集。 -因此,如果我启动从
LocationAwareActivity
继承的任何 Activity ,则该 Activity 将始终停留在堆上。因此,问题是停止接收位置更新从而允许对
activity
进行垃圾收集的正确方法是什么。可以在这里访问该项目的全部源代码-https://github.com/snijsure/MultiActivity
最佳答案
在 removeLocationUpdates 中,您应该传递 locationCallback ,当前实现是错误的。
尽管如此,仍有可能在其他地方发生内存泄漏。您应该尝试将Leakcanary集成到您的应用中,它可以为您提供引用树,并告诉您哪个字段或监听器导致了此内存泄漏。
你可以引用one of my only blog post here
public void stopLocationUpdates() {
if (locationProviderClient != null) {
try {
final Task<Void> voidTask = locationProviderClient.removeLocationUpdates(locationCallback);
if (voidTask.isSuccessful()) {
Log.d(TAG,"StopLocation updates successful! ");
} else {
Log.d(TAG,"StopLocation updates unsuccessful! " + voidTask.toString());
}
}
catch (SecurityException exp) {
Log.d(TAG, " Security exception while removeLocationUpdates");
}
}
}