

ログイン処理は自作の`User`クラスで`Volley`を使ってAPIを叩いてjson等取得で行っています。  
成功のjsonが得られたらそれを`MainActivity`に通知すべく`EventBus`を用いています。  
以前は問題なかったのですが、最近ログイン処理後の`EventBus`通知周り(?)で  
`OutOfMemoryError`が出てアプリが落ちるようになりました。

タイミングはログアウトした後もう一度ログインしようとした時です。

最近はコードのリファクタリングを行っていたのでそれでエンバグした恐れもありますが、  
試すためにログアウト処理に手を加えて終わったら元に戻す程度はやりましたが、  
それ以外でログインやログアウト処理周りを変更した覚えはありません。

エラー内容は以下の通りです。

[code]

    08-27 14:34:39.656    2754-2754/com.example.sakaguchi E/AndroidRuntime﹕ FATAL EXCEPTION: main
        Process: com.exaple.sakaguchi, PID: 2754
        java.lang.OutOfMemoryError: Failed to allocate a 14549848 byte allocation with 4194304 free bytes and 11MB until OOM
                at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95)
                at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:125)
                at java.lang.StringBuffer.append(StringBuffer.java:278)
                at java.io.StringWriter.write(StringWriter.java:123)
                at com.android.internal.util.FastPrintWriter.flushLocked(FastPrintWriter.java:358)
                at com.android.internal.util.FastPrintWriter.appendLocked(FastPrintWriter.java:303)
                at com.android.internal.util.FastPrintWriter.write(FastPrintWriter.java:625)
                at com.android.internal.util.FastPrintWriter.append(FastPrintWriter.java:658)
                at java.io.PrintWriter.append(PrintWriter.java:691)
                at java.io.PrintWriter.append(PrintWriter.java:31)
                at java.lang.Throwable.printStackTrace(Throwable.java:324)
                at java.lang.Throwable.printStackTrace(Throwable.java:300)
                at android.util.Log.getStackTraceString(Log.java:340)
                at android.util.Log.e(Log.java:243)
                at de.greenrobot.event.EventBus.handleSubscriberException(EventBus.java:521)
                at de.greenrobot.event.EventBus.invokeSubscriber(EventBus.java:500)
                at de.greenrobot.event.EventBus.postToSubscription(EventBus.java:429)
                at de.greenrobot.event.EventBus.postSingleEventForEventType(EventBus.java:410)
                at de.greenrobot.event.EventBus.postSingleEvent(EventBus.java:383)
                at de.greenrobot.event.EventBus.post(EventBus.java:263)
                at com.exaple.sakaguchi.model.User$1.onResponse(User.java:92)
                at com.exaple.sakaguchi.model.User$1.onResponse(User.java:85)
                at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:65)
                at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
                at android.os.Handler.handleCallback(Handler.java:739)
                at android.os.Handler.dispatchMessage(Handler.java:95)
                at android.os.Looper.loop(Looper.java:135)
                at android.app.ActivityThread.main(ActivityThread.java:5257)
                at java.lang.reflect.Method.invoke(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:372)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
    
[/code]

まずMemoryMonitorでメモリの使用量を確認してみると、  
ちょっとメモリ使用量増えた？と思うと突然どーんと使用量が増えてメモリ不足になっている  
感じです。  
ヒープダンプを取得して **Eclipse Memory Analyzer** で解析を試みたのですが、  
原因となっているオブジェクト等がどこで生成されたものであるかがわかりませんでした。  
下の画像はTop Components» (99%)» Top Consumersのものなのですが、  
見ている場所が良くないでしょうか？  
[![Top Components» <system class loader> \(99%\)» Top
Consumers](https://i.stack.imgur.com/7WFud.png)](https://i.stack.imgur.com/7WFud.png)

なにか原因がわかる方いたらよろしくお願い致します。


CC BY-SA 3.0
2015-08-27T06:46:48.497
14895
2015-08-28T03:00:54.440
2015-08-28T03:00:54.440
9710
9710
question
android android-volley eventbus memory-leaks
ログアウトからのログイン処理後EventBusで通知しようとするとメモリ不足になる