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. REST APIで大量のデータを読み込む - Ruby on rails
- 2. 大量のデータを豚に読み込む
- 3. ASP.NET/Javascript:ブラウザに大量のデータを読み込む
- 4. Python:大容量のファイル読み込みストア操作書き込みプログラムでのRAM使用量の削減
- 5. ClassNotFoundException一部のコンピュータでアプレットを読み込んだとき
- 6. JQGrid 4.3.2 JSONデータを読み込んだときのgetAccessor関数のエラー
- 7. Android Accelerometerのデータ読み込み
- 8. Javaで大量のデータを読み取る
- 9. Xamarin Android OutOfMemoryErrorビューページャーの大きな画像
- 10. データを読み込んだ後でSocket.flush()が必要ですか?
- 11. xmlファイルを読み込んだときのヌルポインタ例外
- 12. 大きなXMLをsybaseに書き込んで読み込みますか?
- 13. cassandra大容量書き込み問題
- 14. C++での大きな配列の保存と読み込み
- 15. Spark graphX:大きなデータを読み込んでグラフを作成する方法
- 16. 大量のGoogle Webフォントを読み込む方法は?
- 17. Javaソケットプログラムが大量のデータを一度に読み取ることができません
- 18. Androidの書き込みと読み込み
- 19. Hibernateでチャンク内のBLOBデータの読み込み/書き込み
- 20. iPhoneでOpenGL ESを使って大きなテクスチャを読み込んだときのglError:0x0501?
- 21. CoreDataから大量のデータを読み取る
- 22. <img>のページを読み込んだ後にタグを埋め込んだときにimgの読み込みエラーが発生する(例:AJAX経由)
- 23. プログレスバーとデータ読み込み
- 24. Android - メモリから読み込んだときに表示が縮まる
- 25. データをuipickerviewに読み込んで、アプリケーションデリゲート
- 26. exc_bad_access code = 1 UIViewを読み込んだとき
- 27. データベースから巨大なデータを読み込み、xmlに書き込むJava
- 28. Android、バイナリデータを読み込んでファイル
- 29. 25GBの大きなテキストファイルの読み込みと処理
- 30. ajaxが読み込んだデータを改ページする方法は?
あなたは 'InputStream'でバッファサイズをあらかじめ割り当てることができませんか?多分それを試してみてください。すべてのアプリがガベージコレクションなしで持っているためには60MBがたくさんあります。とにかく、Androidのいずれかのポイントで多くのデータをリースすると思います。また、データをバイト配列の配列に分割することもできます。 – hwrdprkns
あなたの質問は十分ではありません。どのような種類のデータを扱おうとしていますか? –