2016-01-05 1 views
5

Google PlayからAndroid App用の次の奇妙なクラッシュレポートを受け取っています(割り振り量と空き容量に注意してください) -Android 5.0のjava.lang.OutOfMemoryError(5M利用時の16k割り当てによる)

java.lang.OutOfMemoryError: Failed to allocate a 16396 byte allocation with 5746272 free bytes and 111MB until OOM 
    at com.android.internal.util.FastXmlSerializer.<init>(FastXmlSerializer.java:55) 
    at com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:183) 
    at android.app.SharedPreferencesImpl.writeToFile(SharedPreferencesImpl.java:597) 
    at android.app.SharedPreferencesImpl.access$800(SharedPreferencesImpl.java:51) 
    at android.app.SharedPreferencesImpl$2.run(SharedPreferencesImpl.java:512) 
    at android.app.SharedPreferencesImpl.enqueueDiskWrite(SharedPreferencesImpl.java:533) 
    at android.app.SharedPreferencesImpl.access$100(SharedPreferencesImpl.java:51) 
    at android.app.SharedPreferencesImpl$EditorImpl.commit(SharedPreferencesImpl.java:455) 
    at com.headuck.headuckblocker.bj.a(Unknown Source) 
    at com.headuck.headuckblocker.UpdateService.e(Unknown Source) 
    at com.headuck.headuckblocker.UpdateService.a(Unknown Source) 
    at x.a.onHandleIntent(Unknown Source) 
    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:145) 
    at android.os.HandlerThread.run(HandlerThread.java:61) 

私はOutOfMemoryErrorに関する多くの質問を知っていますが、利用可能な空き容量よりはるかに小さいバイト割り当てが原因ではないようです。

ユーザーはAndroid 5.0でGalaxy S5を使用していましたが、ゲームをプレイしている間にこのようなクラッシュが発生していると報告しています(ゲームは問題ではありません) - 別のメモリを使用するアプリケーションフォアグラウンドでは、私のアプリケーションのバックグラウンドサービスが実行される予定です。 Google Playのレポートでは、他の方法で詳細を知ることはできません。

私の質問は、これが起こる原因となる可能性があることと、アプリがそれを避けるために取る可能性のある対策です。

いくつかの背景(該当する場合):上記のクラッシュは、UI /ビットマップに関係しない定期的にスケジュールされたアプリケーションのバックグラウンドサービスからのものです。サーバーからデータをダウンロードし、データベース/ステータスを更新するだけです。 5年前のマシンでRAMを大幅に削減し、問題なく動作し、近代的なAndroid搭載携帯電話の標準によって非常に軽くなるはずです。上記のエラーのインスタンスは、データベースの更新後の時点で発生し、サービスは更新されたステータスを共有プリファレンスに書き込みます。

編集:ちょうどOutOfMemoryError in android on allocation 4Mb when 10Mb is freeを読んでください。これは投稿後にこの質問にリンクされていますが、利用可能な空き領域がこの場合断片化されている可能性は非常に低いですか?他の原因が考えられますか?

+0

https://github.com/facebook/fresco/issues/404 https://github.com/facebook/fresco/issues/159 –

答えて

0

Android Studioを使用している場合は、マニフェストファイルに「LargeHeap = true」を追加します。

このように、

アンドロイド:largeHeap = "true" を

+0

ありがとうございます。特にメモリが空いているので、間違いなく過剰殺しであり、推奨されていません実践http://stackoverflow.com/questions/27396892/androidlargeheap-true-in-mainifast-advantages – headuck

+0

私は本当に大きなヒープを追加することをお勧めしますので、私はそうは思わない。 stacktraceによると、ビットマップ操作はありません。oom.http://stackoverflow.com/questions/27396892/androidlargeheap-true-in-mainifast-advantages – mcd

0

私は同様の問題に直面してきました。 これは私が解決するために何をしたかであること

  1. /フォルダ/描画可能nodpiフォルダへ/描画可能なフォルダ内のすべての「画像」
  2. 移動し、あなたの解像度に新しいフォルダ描画可能nodpiを作成

希望は誰かに助けてくれるでしょう:)

+0

ありがとう、おそらく他の人には役に立ちますが、私の場合はそうですドロアブルを使用しないバックグラウンドプロセスなので、これは私には当てはまりません。 – headuck

関連する問題