ログアウトからのログイン処理後EventBusで通知しようとするとメモリ不足になる
ログイン処理は自作のUser
クラスでVolley
を使ってAPIを叩いてjson等取得で行っています。
成功のjsonが得られたらそれをMainActivity
に通知すべくEventBus
を用いています。
以前は問題なかったのですが、最近ログイン処理後のEventBus
通知周り(?)で
OutOfMemoryError
が出てアプリが落ちるようになりました。
タイミングはログアウトした後もう一度ログインしようとした時です。
最近はコードのリファクタリングを行っていたのでそれでエンバグした恐れもありますが、
試すためにログアウト処理に手を加えて終わったら元に戻す程度はやりましたが、
それ以外でログインやログアウト処理周りを変更した覚えはありません。
エラー内容は以下の通りです。
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)
まずMemoryMonitorでメモリの使用量を確認してみると、
ちょっとメモリ使用量増えた?と思うと突然どーんと使用量が増えてメモリ不足になっている
感じです。
ヒープダンプを取得してEclipse Memory Analyzerで解析を試みたのですが、
原因となっているオブジェクト等がどこで生成されたものであるかがわかりませんでした。
下の画像はTop Components» (99%)» Top Consumersのものなのですが、
見ている場所が良くないでしょうか?
なにか原因がわかる方いたらよろしくお願い致します。