Android搭載デバイスのSDカード(〜60MB)にかなり大きなファイルをダウンロードしています。ダウンロードはうまくいっていますが、このファイル全体をメモリに保存する必要があります。私はそれがスマートフォンのためのメモリの巨大なチャックだと知っていますが、私のデバイスがその倍以上の量を持っていることは分かっています。とにかく、私の実際の問題は、ファイルをバイト配列に読み込むときにOutOfMemoryError
になります。私のアプリケーションのために割り当てられたメモリを増やす方法はありますか、ファイルを参照してファイルを "偽造"しても、ファイルを内部メモリにロードせずに外部ストレージに保存する方法はありますか?Androidで大量のデータを読み込んだときのOutOfMemoryError
答えて
Androidの各仮想マシンインスタンスには、VM予算というものがあります。これは、基本的に、アプリ全体が占めることができるメモリの最大量です。 getRuntime()。maxMemory()は、現在のインスタンスのVMの予算サイズを返します。
予算は、16MB(G1)から48MB(Moto Xoom)のどこでもかまいません。私の頭の上から覚えているように、それらの数字は異なるかもしれません。
通常、このような場合は、データをInputStreamとして読み込み、データを読み取るときにデータを処理しますが、データ自体は保持しません。
これがビットマップの場合。あなたは使用することができます...
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4; // Divides the width and height each by 4 when reading the data in.
Bitmap bitmap = BitmapFactory.decodeFile(String "filePath", options);
Bitmap bitmap = BitmapFactory.decodeStream(InputStream "fileStream", options);
G1の場合は16MBでした。 –
ありがとう、コメントを更新しました。私はhttp://developer.android.com/resources/dashboard/screens.htmlで、実際のデバイスごとの仕様で、メモリクラスのチャートを持っているといいですね。 –
それはかなり簡単です: –
簡単な答えは、あなたの現在のデザインを本当に再考する必要があります。なぜ60MBのデータをメモリにロードする必要があるのか説明できますか?
このデータ量は、可能であればデータベースを魅力的にするでしょう – Snicolas
それは私有のバイナリファイルです。このファイルを読むために与えられたライブラリは、バイト配列として全体を必要としています...だから私は少しですその点で制限されています。 –
それは難しいです。他にも考慮すべき点があります。多分、サーバー/クライアントの関係でデコードするための専用のプロセス/スレッドがあるかもしれません。意味は、ファイルをサーバー上で処理してから、クライアントにダウンロードしてストリーミングまたは表示することです。これは、必要な再設計の単なる例です。がんばろう。 – Maurycy
- 1. Highcharts/Highstock(非同期読み込み)で大きなデータ量
- 2. php空の行を読み込んだときにclobデータを読み込む
- 3. REST APIで大量のデータを読み込む - Ruby on rails
- 4. 大量のデータをhtmlで読み込む
- 5. okhttp3大容量ファイルのOutOfMemoryError
- 6. 大量のデータを豚に読み込む
- 7. ASP.NET/Javascript:ブラウザに大量のデータを読み込む
- 8. 一定量のデータを読み込む
- 9. Python:大容量のファイル読み込みストア操作書き込みプログラムでのRAM使用量の削減
- 10. Android OpenGLの読み込みテクスチャは膨大な量のメモリを奪います
- 11. ビッグクエリーのための大量のデータ読み込み中のビーム処理失敗
- 12. データベースから読み込んで大きなデータをローカルドライブに書き込む
- 13. 大きなJSONObjectのファイルへの書き込み/読み込みAndroid
- 14. Firebaseで大量のデータを読み込む最も効率的な方法
- 15. バイナリファイルにゼロ(大量)を書き込んでください
- 16. ClassNotFoundException一部のコンピュータでアプレットを読み込んだとき
- 17. ajaxでページを読み込み、読み込んだページアンカーにスクロール
- 18. Xamarin Android OutOfMemoryErrorビューページャーの大きな画像
- 19. JQGrid 4.3.2 JSONデータを読み込んだときのgetAccessor関数のエラー
- 20. Android Accelerometerのデータ読み込み
- 21. Android Tess-Twoライブラリの読み込みデータ
- 22. Cassandraは大容量パーティションの書き込みレイテンシを読み取ります
- 23. Javaで大量のデータを読み取る
- 24. Matlabのファイルのデータを読み込みできません
- 25. イメージを読み込んだときに積み重ねる - Slick
- 26. cassandra大容量書き込み問題
- 27. C++での大きな配列の保存と読み込み
- 28. Javaでリフレクションを使用して読み込んだクラスの読み込みクラスの読み込み
- 29. 大量のGoogle Webフォントを読み込む方法は?
- 30. xmlファイルを読み込んだときのヌルポインタ例外
あなたは 'InputStream'でバッファサイズをあらかじめ割り当てることができませんか?多分それを試してみてください。すべてのアプリがガベージコレクションなしで持っているためには60MBがたくさんあります。とにかく、Androidのいずれかのポイントで多くのデータをリースすると思います。また、データをバイト配列の配列に分割することもできます。 – hwrdprkns
あなたの質問は十分ではありません。どのような種類のデータを扱おうとしていますか? –