2017-11-25 3 views
2

私のplay-consoleでこれらのエラーが発生しています。誰かが部屋のOOMエラーをどのようにして最善に処理するかを知っていますか?ROOM OutOfMemoryErrorR(OOM)

java.lang.OutOfMemoryError: 
    at android.database.CursorWindow.nativeGetString (Native Method) 
    at android.database.CursorWindow.getString (CursorWindow.java:451) 
    at android.database.AbstractWindowedCursor.getString (AbstractWindowedCursor.java:51) 
    at org.walleth.data.transactions.TransactionDAO_Impl$8.compute (TransactionDAO_Impl.java:1272) 
    at org.walleth.data.transactions.TransactionDAO_Impl$8.compute (TransactionDAO_Impl.java:1212) 
    at android.arch.lifecycle.ComputableLiveData$2.run (ComputableLiveData.java:87) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:607) 
    at java.lang.Thread.run (Thread.java:762) 
+0

でmodule.gradleファイルにヒープサイズを増やしてください。 OOMは2つのトリガを持っています。メモリブロックをあまりにも大きく要求する(「ビットマップ」と思う)か、どこかでリークが原因でメモリが切れてしまっています。後者の場合、クラッシュしている場所では、最終的にはメモリが不足している場所がありますが、必ずしも漏れがある場所ではありません。あなたは、どのくらいの割り当てが失敗したかを示すこのクラッシュログの変形を取得していますか? – CommonsWare

+0

残念ながら、私は割り振りの大きさがわからないクラッシュログの変種を持っていません。しかし、それは巨大な文字列である可能性があります(データフィールドは場合によっては大きくなるかもしれません)。 - このOOMを捕まえることができ、このアイテムを無視する方法はありますか(契約の展開が最も可能性があり、 ) – ligi

+0

制御できないバックグラウンドスレッドで発生しているため、特定の例外を非常にうまくキャッチする方法がなく、LiveDataは例外を伝播しません。あなたのDAOにLiveDataを返すのではなく、代わりにRxJavaタイプを使用することを検討してください。または、このクエリをDAOで同期させ、自分のバックグラウンドスレッドの@Queryメソッドを呼び出すように手配します。 – CommonsWare

答えて

0

それは本当に巨大 `STRING`だ場合を除き、ルームはあなたの問題ではないかもしれないが、単にあなたがクラッシュしている場所のアプリ

+0

これは私にとっては正しいことではありません。なぜこれが解決策だと思うのか、詳しく説明できますか? – ligi

関連する問題