大きなビットマップを処理するなど、メモリを大量に消費するアプリケーションがあります。このようなビットマップを処理するためのよく知られた手法を使用してアプリケーションを調整しました(回答のチュートリアルへのリンクはありません...)。OutOfMemoryError
例外なく正常に動作するようにしましたが、HC および ICS を実行しているデバイスでのみ、同じアプリケーションが Jelly Bean でメモリ消費量が約 80% 増加し、ユーザー エクスペリエンスが低下し、アプリの動作が遅くなり、動作が遅くなります。
簡単なテストを用意しました。Eclipse のテンプレートを使用して最も単純な Android アプリケーションを作成しました。アプリには、バックグラウンド ビットマップ (1280 x 800) を持つアクティビティが 1 つだけあります。Android 3.1 (Asus A500) を搭載したデバイスでは、以下が割り当てられます。
01-23 12:28:02.402: D/dalvikvm(31706): GC_FOR_ALLOC freed 65K, 4% free 6559K/6787K, paused 17ms
01-23 12:28:02.402: I/dalvikvm-heap(31706): Grow heap (frag case) to 10.355MB for 4096016-byte allocation
01-23 12:28:02.432: D/dalvikvm(31706): GC_CONCURRENT freed 1K, 3% free 10558K/10823K, paused 1ms+2ms
JellyBean 4.2.1 を搭載した Nexus 7 では、以下を割り当てます。
01-23 12:13:49.740: D/dalvikvm(23815): GC_FOR_ALLOC freed 84K, 4% free 7464K/7700K, paused 18ms, total 18ms
01-23 12:13:49.750: I/dalvikvm-heap(23815): Grow heap (frag case) to 11.338MB for 4096016-byte allocation
01-23 12:13:49.770: D/dalvikvm(23815): GC_FOR_ALLOC freed 1K, 3% free 11463K/11704K, paused 23ms, total 23ms
01-23 12:13:49.800: D/dalvikvm(23815): GC_CONCURRENT freed <1K, 3% free 11463K/11704K, paused 2ms+2ms, total 23ms
01-23 12:13:49.900: D/dalvikvm(23815): GC_FOR_ALLOC freed <1K, 3% free 11463K/11704K, paused 12ms, total 13ms
01-23 12:13:49.920: I/dalvikvm-heap(23815): Grow heap (frag case) to 18.259MB for 7259056-byte allocation
01-23 12:13:49.940: D/dalvikvm(23815): GC_FOR_ALLOC freed 0K, 2% free 18552K/18796K, paused 16ms, total 16ms
01-23 12:13:49.960: D/dalvikvm(23815): GC_CONCURRENT freed <1K, 2% free 18552K/18796K, paused 3ms+2ms, total 17ms
だから私は2つの質問があります:
1、メイン アクティビティのバックグラウンドでビットマップを 1 つだけ使用すると、アプリケーションが大量のメモリを消費するのはなぜですか?
2、同じアプリケーションを実行すると、JellyBean を搭載したデバイスのメモリ消費量が約 80% 増加するのはなぜですか?
EDIT1:
すべてのデバイスの画面解像度は同じです: 1280 x 800 px