ウェブからダウンロードした写真を壁紙として使用するライブ壁紙アプリがあります。
メモリ マネージャーは、私のアプリが 90MB から 120MB を使用していることを示しています (これは 1GB の RAM を搭載したデバイスです)。それはたくさんあります。壁紙サービスは頻繁に強制終了され、システムがデフォルトの静的壁紙に戻ることさえあります。
メモリ リークを徹底的にチェックし、HPROF ダンプ分析では、現在使用されている大きなオブジェクトが 2 つしかないことが示されています。 12MB)、HPROF 概要画面で報告されている合計 32MB。
dumpsys meminfo はこれを示します:
** MEMINFO in pid 1354 [com.myapp.lwp] **
Shared Private Heap Heap Heap
Pss Dirty Dirty Size Alloc Free
------ ------ ------ ------ ------ ------
Native 16 16 16 112304 5274 993
Dalvik 41947 19316 41428 74572 53120 21452
Cursor 0 0 0
Ashmem 0 0 0
Other dev 20170 33176 3460
.so mmap 5690 2620 1504
.jar mmap 0 0 0
.apk mmap 64 0 0
.ttf mmap 6 0 0
.dex mmap 604 0 4
Other mmap 1035 300 272
Unknown 5127 472 5116
TOTAL 74659 55900 51800 186876 58394 22445
Objects
Views: 27 ViewRootImpl: 0
AppContexts: 4 Activities: 1
Assets: 3 AssetManagers: 3
Local Binders: 16 Proxy Binders: 23
Death Recipients: 0
OpenSSL Sockets: 1
私はこれを読みました: Android でアプリケーションのメモリ使用量を確認するにはどうすればよいですか? しかし、それは私が何かを結論付けるのに役立ちません...
私も使用しました:
cat /proc/1354/statm
139422 29326 11550 2 0 10330 0
それもあまり役に立ちません。
DDMS は 63MB のヒープ サイズを示します。
私の質問は?2 倍の画面サイズの画像を扱うアプリは正常であり、期待されるものですか? そうでない場合、残りの 60 ~ 90MB には何がありますか? (HPROF から合計 30MB を差し引いています)。アプリで大量のメモリを使用するために何が間違っている可能性がありますか? 実際に行うアプリ:
1) Download list of photos (max 100) as JSON string and parse that string to get ids and urls for these photos.
2) Download first photo and save it to cache folder
3) Decode photo and if necessary resize it to fit 2Width*Height of screen (photos are actualy smaller that my Full HD screen).
4) Draw it on wallpaper canvas (and draw repeatedly while user is scrolling)
5) If on WIFI download next 10 photos to cache folder (without decoding, just saving)
より多くの写真を同時に使用するより複雑な他のモードがありますが、上記のメモリ使用量は最も単純なシナリオ用です。
これは継続的な使用の問題ではありません。メモリは最初の起動後に説明されているとおりです。サービスを強制終了すると、再起動後に 90MB が使用されます。オプション画面を最初に開いた後 (いくつかのオプションを選択できる小さなアクティビティ/ダイアログ - バックグラウンドのドローアブル以外のグラフィックはありません)、メモリ使用量が 124MB に跳ね上がり、画面を閉じると 112MB に戻ります。壁紙の写真を最初に変更した後、130+ にジャンプし、120+ に戻ります。おそらく、ビットマップのデコード中にヒープサイズが増加し、その後はそのままになるためです。
私は何をすべきか?アプリのメモリ使用量を減らす方法 (可能な場合) はありますか? 他にどこを見る?すぐに解決できるとは思いませんが、さらに詳しいガイダンスがあれば役立ちます...