我认为FusedLocationProvider api的代码泄漏了,因为我在这个question中问道。我尝试使用LeakCanary来检测内存泄漏,但是在旋转手机后我没有收到任何内存泄漏警告,也尝试使用平板电脑。设置LeakCanary的代码:
public class MyApplication extends Application {
private RefWatcher refWatcher;
@Override
public void onCreate() {
super.onCreate();
if (LeakCanary.isInAnalyzerProcess(this)) {
// This process is dedicated to LeakCanary for heap analysis.
// You should not init your app in this process.
return;
}
refWatcher = LeakCanary.install(this);
// Normal app init code...
Log.d("TAG", "MyApplication onCreate()");
}
}
我尝试了20次但是2次我从LeakCanary收到通知,甚至没有旋转手机但是在设备旋转后应该发生内存泄漏。
我还有另一个问题,即使没有发生内存泄漏并且不存在对这些MainActivities的引用,为什么会创建MainActivity的新实例。
设备旋转2次而不启动位置更新:
如果使用onPause()
方法停止位置更新stopLocationUpdates()
,为什么会发生内存泄漏?
为什么LeakCanary没有检测到这些泄漏?
您不需要为RefWatcher创建变量。
你可以试试这个:
@Override
public void onCreate() {
super.onCreate();
if (LeakCanary.isInAnalyzerProcess(this)) {
// This process is dedicated to LeakCanary for heap analysis.
// You should not init your app in this process.
return;
}
LeakCanary.install(this);
// Normal app init code...
}
还要确保你的gradle内有这些。
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3'
//Optional, if you use support library fragments:
debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.3'
testImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3'