2016-11-16 13 views
0

(RecyclerviewまたはListview)とArrayListによって提供されるデータを使用して無限リストを使用することを考えていました。 (オブジェクト - モデルクラス)無限リストの場合のメモリ処理の概念

無限リストでは、配列が大きくなり、リストに占めるメモリも増えます。だから、アプリケーションはどのように振る舞いますか、メモリの例外が発生しないか、ハングしません。

私はちょうどこれで動作するコンセプトを知りたいのですが、それが例外を作成する場合、どうすればそれを処理できるのか教えてください。

+1

'ArrayList'の場合無限は' Integer.MAX_VALUE - 8'を意味します – Blackbelt

+0

制限なしでCollectionを使うと(Blackbeldのコメントを参照)、無限はメモリのために常にOutOfMemoryErrorを引き起こします有限です。未使用/見えない値をクリアする必要があります。 – AxelH

答えて

0

アプリは非常に可能性の高いOOM例外がスローされますし、それを処理する方法は以下の通りです:

try { 
    // fill your infinite list as you want 
} catch (OutOfMemoryError E) { 
    //release some/all objects from your list, f.e., the first 100 ones or so 
} 

私はそれが役に立てば幸い。

+0

他のエラーが発生する可能性があるため、これでは不十分です。 'Error'はキャッチされているとは思わない – AxelH

+0

それは十分で、私を信じてください。それを試してみましょう。どんな型のArrayListを作成してしばらくの間に値を追加してください。(真) – kelmi92

+0

この。このアプリの他のスレッドは、メモリを共有するので影響を受ける可能性があります。だから、多くがクラッシュする可能性があります。エラーから復旧しようとしないでください(場合によっては例外があります)。 [いくつかの読書](http://stackoverflow.com/a/8729011/4391450) – AxelH

0

リサイクラビューで読み込む前に、使用したメモリが使用可能なメモリよりも小さいことを確認してください。したがって、OutOfMemoryExceptionを処理する最も効率的な方法は、例外を避けるために大量のデータをメモリにロードしようとしないようにアプリケーションをアーキテクチャすることです。

あなたが使用しているものは500または1000以上のものはありませんので、メモリキャッシュに保存されるので心配する必要はありません。実際の問題は、リサイクル・ビュー内でイメージをロードしているときに、ビューを継続的にリサイクルする必要があるときに発生します。

はまた、アプリケーションクラスでは、あなたが

@Override 
public void onLowMemory() { 
    super.onLowMemory(); 
} 

十分なメモリを持っていないとき、あなたはまだ質問があれば私に知らせてくださいコールバックを取得しています。