2016-07-29 12 views
2

これは潜在的な重複する可能性がある場合は申し訳ありませんが、私の問題のための任意の答えを見つけることができませんでした。ですから、あなたが良い情報源を参照できるなら、私は見て喜んでいるでしょう。Androidの微妙なメモリリーク解析MAT

ここで問題は、私は私のアプリを実行している間に微妙なメモリリークを観察してきました。したがって、16時間実行した後、ヒープ・ダンプはEclipse Memory Analyzerを介して実行され、メモリー・リークの疑いがあるスレッドはガベージ・コレクションでないスレッドが多いことを示唆しています。ヒープは、約16時間実行した後に3MB増加します。だからここ

private WorkerThread mWorkerThread; 

private static Runnable mUploadTask = new Runnable() { 
     @Override 
     public void run() { 
      Object[] data = dataQueue.poll(); 
      if(data != null) { 
        uploadPacketviaAMQP((String)data[0], (String)data[1]); 
     } 
    }; 

    private static class WorkerThread extends HandlerThread{ 

    private Handler mWorkerHandler; 

    public WorkerThread(String name) { 
     super(name); 
    } 

    public void postTask(Runnable task){ 
     mWorkerHandler.post(task); 
    } 

    public void prepareHandler(){ 
     mWorkerHandler = new Handler(getLooper()); 
    } 
} 

MAT画面グラブである - LEFTパネルは5分間のアプリを実行した後で、右パネルは16の後である:ここでは

は、私は戻ってグラウンドタスクを実行するために使用されるコードがあります時間。参照は再帰的で、前後にジャンプして、どんな具体的なオブジェクトにもつながっていないので、私には意味をなさない。

MAT output

どのように私はこの問題のデバッグについては行くべき?

ありがとうございました。

答えて

0

Leakcanaryを試すことができます。メモリリークを検出するのは本当に正確です。これはLogcatのリークトレースを表示し、最近のリークの履歴を保持するアプリケーションに追加のアクティビティを付加します。ダンプヒープを掘り下げることなく、コード内でメモリリークの可能性のある場所を見つけるのに役立ちます。