【问题标题】:Unable to use LeakCanary to watch a fragment (ClassCastException error)无法使用 LeakCanary 观看片段(ClassCastException 错误)
【发布时间】:2017-02-02 22:07:44
【问题描述】:

我的应用程序存在内存泄漏问题,我阅读了有关 LeakCanary 的信息,因此我尝试对其进行设置。

在我的应用程序中,我有一个包含两个片段的活动,我试图只观察第一个片段是否泄漏。我是这样设置的:

我制作了这个 Java 类来包含 LeakCanary 逻辑。

public class ExampleApplication extends Application {
public static RefWatcher getRefWatcher(Context context) {
    ExampleApplication application = (ExampleApplication) context.getApplicationContext();
    return application.refWatcher;
}

private RefWatcher refWatcher;

@Override public void onCreate() {
    super.onCreate();
    refWatcher = LeakCanary.install(this);
}

}

然后我将它添加到我的片段的 OnDestroy 中:

 @Override public void onDestroy() {
    super.onDestroy();
    RefWatcher refWatcher = ExampleApplication.getRefWatcher(getActivity());
    refWatcher.watch(MainFragment.this);
}

当我销毁包含该片段的活动时,我收到以下错误:

Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to projectname.ExampleApplication

我已广泛搜索 Google 和文档,但找不到遇到此错误的其他人。我不知道该怎么做,但我真的很想使用这个工具。如果有人有任何建议,我将不胜感激。

【问题讨论】:

  • 很奇怪..我有完全相同的代码,我没有收到任何错误..你的应用程序在哪个 android 版本上运行?
  • minSdkVersion 19, targetSdkVersion 24, compileSdkVersion 24。这确实很奇怪,我会一直搞砸它,看看能不能让它工作。
  • 我刚刚更新了泄漏金丝雀依赖项以在 android Marshmallow 中测试我的应用程序... debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4' releaseCompile 'com.squareup.leakcanary:leakcanary-android -no-op:1.4' testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4'

标签: java android android-fragments memory-management memory-leaks


【解决方案1】:

您需要在清单文件中提及应用程序子类的名称(在您的情况下为示例应用程序)以使其正常工作,如果未提及名称,android 将使用基类代替(即应用程序),然后当您尝试执行此操作时,class-cast 操作将引发异常

ExampleApplication application = (ExampleApplication) context.getApplicationContext();

。要更正它,请将此代码添加到清单文件中的应用程序标记中。此代码用于演示目的。

<application    
android:name="ExampleApplication">
<activity/>
</application>

它会按需要工作。

在这里查看更多reference

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-28
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2023-03-28
    相关资源
    最近更新 更多