1

私のアプリでメモリリークに問題があり、LeakCanaryについて読んで設定しようとしました。LeakCanaryを使用してフラグメントを見ることができません(ClassCastExceptionエラー)

私のアプリケーションでは、2つのフラグメントを含む1つのアクティビティがあります。最初のフラグメントはリークのみを監視しようとしています。これは私がそれをセットアップする方法です:

この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とドキュメントを広範に検索しましたが、遭遇した他の人は見つかりませんでしたこのエラー。私は何をすべきか迷っていますが、私は本当にこのツールを使いたいと思います。誰かがアドバイスを持っているなら、本当に感謝します。

+0

はこちら

ルックはまったく同じコードを持っていると私は、あなたのアプリが実行されているAndroidのバージョンを任意のerrors..inを得ることはありませんか? – tsiro

+0

minSdkVersion 19、 targetSdkVersion 24、compileSdkVersion 24.実際には、私はそれをうまく動作させることができるかどうかを知るためにそれを使いこなします。 – user2805004

+0

私はちょうどアンドロイドマシュマロで私のアプリをテストするリークカナリーの依存関係を更新しました... 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 ' – tsiro

答えて

2

名前が記載されていない場合は、マニフェストファイルのApplicationサブクラス(例の場合はアプリケーション)の名前をマニフェストファイルに記述して、アンドロイドが代わりにベースクラス(つまりApplication)を使用し、アプリケーション・タグで、マニフェストファイルにこのコードを追加し、それを修正する.TOこの

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

をしようとするときに、クラス・キャスト操作は例外をスローします。このコードはデモ用です。

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

これは必要に応じて機能します。非常にweird..iよりreference