2016-12-31 10 views
4

私はLeakCanaryを正常にインストールしたと信じています。私のリークキャナリーは機能していますか?知る方法?

私は、build.gradleファイルにdebug、release、およびtestの依存関係を追加しました。

私はアプリケーションクラスに必要なファイルを追加しました。必要に応じてインポートします。マニフェストにアプリケーションクラスが正しく追加されていることを確認しました。私のアプリケーションクラスを明示的に呼び出す必要がありますか?

<application 
    android:name=".MyApplication" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 

エミュレータでアプリケーションを実行しても、何も表示されません。私はAndroidモニターを監視し、何の違いも見られません。それがすべて機能しているかどうかはどのようにわかりますか?私は自分のアプリケーションクラスを共有しました。

import android.app.Application; 
import android.content.res.Configuration; 
import com.squareup.leakcanary.LeakCanary; 

public class MyApplication extends Application { 

@Override 
public void onCreate() { 
    super.onCreate(); 

    if (LeakCanary.isInAnalyzerProcess(this)) { 
     return; 
    } 
    LeakCanary.install(this); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
} 

@Override 
public void onLowMemory() { 
    super.onLowMemory(); 
} 

}

答えて

2

私のアプリケーションクラスを明示的に呼び出す必要がありますか?それはすべてが働いている場合

は、どのように私は知っていますか?

意図的にリークします。たとえば、ランチャーアクティビティのインスタンスをstaticフィールドに割り当てます。

+0

私は試しましたが、多分私はそれを間違えました。私は一般的なメモリリークを検出し、それらの2つを試しました。変化なし。私は間違ったことをしたに違いない。リーク・カナリアが正常に機能しているとすれば、何が見えるはずですか? – seekingStillness

+0

@seeking_stillness:「一般的なメモリリークを検出し、その2つを試しました」 - LeakCanaryは、任意のメモリリークを検出しません。自動的に検出されるのは、漏洩したアクティビティだけです。これは、あなたが 'static 'フィールドに1つを割り当てることによってアクティビティをリークすることを提案した理由です。 「正常に機能していると、リークカナリアからどのように見えたらいいでしょうか?」 - アクティビティが破棄された後(例えば、BACKを押すと)、数秒後に、あなたが破壊したアクティビティが漏洩したとLeakCanaryが信じると、LeakCanaryがヒープをダンプしていることを示すカスタムのToastが表示されます。 – CommonsWare

+1

@seeking_stillness:その後、1分ほどでリークがあった場合は、ステータスバーに「通知」が表示されます。 – CommonsWare

関連する問題