Android 如何从LeakCanary中排除类?

Android 如何从LeakCanary中排除类?,android,leakcanary,Android,Leakcanary,我正在这样做: ExcludedRefs excludedRefs = AndroidExcludedRefs.createAppDefaults() .clazz("androidx.lifecycle.ReportFragment") .reason("Very annoying report fragment leak that isn't a leak apparently") .always

我正在这样做:

ExcludedRefs excludedRefs = AndroidExcludedRefs.createAppDefaults()
                .clazz("androidx.lifecycle.ReportFragment")
                .reason("Very annoying report fragment leak that isn't a leak apparently")
                .alwaysExclude()
                .build();
        LeakCanary
                .refWatcher(context)
                .listenerServiceClass(DisplayLeakService.class)
                .excludedRefs(excludedRefs)
                .watchDelay(10, TimeUnit.SECONDS)
                .buildAndInstall();
然而,我仍然得到
报告片段从未进行过GCed,但没有发现泄漏

我的一项活动也得到了这个消息,我不知道如何处理这些
no leak found
消息


编辑:当前使用LeakCanary 1.6.3

我发现了这个;我想我可以试试

这是预期的工作。 在执行堆转储和分析之前,我们无法知道是否排除了泄漏。完成此操作后,默认行为是以[Excluded]作为前缀显示通知。这让用户知道泄漏的金丝雀已经完成。若并没有任何反馈,你们就并没有办法知道是否泄漏了金丝雀。这可以说是一种比完全没有反馈更好的用户体验


您可以通过提供自己的com.squareup.leakcanary.AbstractAnalysisResultService子类而不是使用默认的com.squareup.leakcanary.DisplayLeakService来定制此行为

尝试此链接我实际上开始认为我不应该阻止它,因为它只是显示给我的类,但我的
活动
是扩展它。我的主要测试手机通常从不向我显示泄漏跟踪,但我在另一部手机上尝试过,它看起来像我的一个活动正在泄漏。该活动中有一些后台任务,这就是它泄漏的原因
 /**
 * Excluding known memory leaks from third party libraries
 * @return
 */
protected RefWatcher installLeakCanary() {
    if (LeakCanary.isInAnalyzerProcess(this)) {
        return RefWatcher.DISABLED;
    } else {

        // IGNORE References: Update or add reference class and context name in instanceField
        ExcludedRefs excludedRefs = AndroidExcludedRefs.createAppDefaults()
                .instanceField("com.example.third.party.TheirClassOne", "context")
                .instanceField("com.example.third.party.TheirClassTwo", "context")
                .build();

        LeakCanary.enableDisplayLeakActivity(this);
        ServiceHeapDumpListener heapDumpListener = new ServiceHeapDumpListener(this, DisplayLeakService.class);
        final RefWatcher refWatcher = LeakCanary.androidWatcher(this, heapDumpListener, excludedRefs);
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

            }

            @Override
            public void onActivityStarted(Activity activity) {

            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

            }

            @Override
            public void onActivityPaused(Activity activity) {

            }

            @Override
            public void onActivityStopped(Activity activity) {

            }

            @Override
            public void onActivityDestroyed(Activity activity) {
                //IGNORE Activities: Update or add the class name here to ingore the memory leaks from those actvities
                if (activity instanceof ThirdPartyOneActivity) return;
                if (activity instanceof ThirdPartyTwoActivity) return;
                if (activity instanceof ThirdPartyThreeActivity) return;
                refWatcher.watch(activity);
            }

            @Override
            public void onActivityResumed(Activity activity) {

            }
        });
        return refWatcher;
    }
}