iOS と Android (Windows Phone については知りません) では、アプリは、デバイスで実行されている各アプリに割り当てられた限られた量のメモリを使用できます。
iOS では、1 つのアプリが OS に割り当てられたよりも多くのメモリを使用しようとすると、アプリが強制終了せずにメモリを解放できるように、このメモリ警告には 3 つのレベルがあると思います。最初の 2 つのレベルでメモリの割り当てが解除されていない場合、次の memoryWarning でアプリが強制終了され、メモリが解放されます。また、OS は、優先度の低いアプリケーション (バックグラウンドのアプリ) からメモリを解放しようとします。
したがって、iOS では、アプリケーションで使用されているメモリを解放しないと、OS が強制終了の代償を払ってメモリを解放します。
Andorid では状況が少し異なりborrrden
、Android ではガベージ コレクションが使用されますが、メモリ リークは依然として存在します。
そのため、Android では、各アプリが初期サイズのヒープを割り当てており、ヒープがヒープのシステム制限を超えてヒープを増やそうとすると、アプリはOutOfMemoryError
以前の警告なしで有名になり、特定のポイントまで増加する可能性があります。アプリが強制終了され、メモリが解放されます。
また、Andorid のもう 1 つの厄介な点は、Android のほぼすべてのバージョンで最大ヒープ サイズが異なることです。そのため、一部のデバイスではアプリが OOM でクラッシュし、別の Android バージョンでは正常に動作する可能性があります。Android の最後の厄介な点は、Android の最新バージョンでのみ、メモリが解放されるとヒープ サイズが減少することです。これは、ヒープが完全に使用される前にシステムがヒープ サイズを増加させるため、OOM を引き起こす可能性があります (防止するのは皮肉なことです)。 OOM) であり、ヒープ サイズが減少していないため、最大ヒープ サイズを超えます。
また、Android には、onLowMemory
システム全体に十分なメモリがない場合に呼び出されるメソッドがありますが、このメソッドはほとんど呼び出されません。
結論として、OS がメモリを必要とする場合に備えて、Andorid と iOS の両方がメモリを解放しますが、これはforce close
アプリで可能です。メモリ使用量のベスト プラクティスを考慮する必要があります。また、OS がアプリを作成するだけでメモリを解放しないようにする必要があります。これにより、できるだけ少ないリソースを使用し、アプリが未使用のメモリをすべて解放する必要があります。