2013 年 9 月 7 日

アンドロイドアプリのメモリ容量を取得する(後編)

3041-logo

前編では、/proc/meminfoの内容を元にアンドロイドで利用できるメモリ量の求め方を考察した。後編では、動作している各アプリのメモリ利用量の取得方法と、そこから利用可能メモリ量を推察してみたい。

アンドロイドアプリの起動はzygote(DVMのデーモン)が実行する。zygoteから起動(fork)された各アプリが必要なメモリを占有するが、共通部分まで、アプリごとに占有してしまうとあっという間にメモリが不足してしまう。

そこで、COW(Copy On Write)と呼ばれる手法で、起動時はzygoteとメモリ空間を共有している(shared)。その後、必要になれば、アプリ専用のメモリ(private)に置き換わる。

それに加えて、各アプリ内では、必要のなくなったメモリを回収するガベージコレクションを実行し、空きメモリを確保しようとする。できるだけメモリを効率よく扱うために、非常に複雑なメモリ管理が行われている。

続きを読む »

2013 年 9 月 6 日

アンドロイドアプリのメモリ容量を取得する(前編)

3024-logo

アンドロイドはLinuxカーネル(2.6.x-3.x)をベースにしたOSに、JavaVM(DalvikVM)を実装しており、複雑なメモリ管理を行っている。

スマートフォンの限られたリソース環境の中で、アプリケーションが快適に動作するように設計されている。メモリが足りなくなるとアプリが突然終了したり、処理速度が遅くなるので、一般のユーザーもメモリがどれぐらい空いているかといったことに関心があるだろう。

設定で実行中のアプリのメモリ利用量を見ることができるが、これは具体的にはどこの値を見てるのだろうか。スマートフォンのスペックから搭載されているメモリ容量はわかるが、実際利用できるメモリ量はどれぐらいだろうか。

続きを読む »

2013 年 9 月 3 日

アンドロイドアプリのinstallLocationを取得する

3010-logo

前回はキャッシュ消去するためにハイドメソッドを利用した方法を紹介したが、ハイドメソッドだけでなくハイドアトリビュートが存在する。
たとえば、アンドロイドアプリのManifestには、インストールロケーションを指定できる(Android2.2以上)。この指定はこのアプリがSDに移動可能かどうかを設定する。
この値をわかれば、事前にSDカードへ移動可能かどうか知ることが可能になる。しかし、この値を取得するAPIは存在しない。
AndroidManifest.xmlを読もうとしても難読化されているので、簡単には読めないだろう。

続きを読む »

2013 年 9 月 2 日

アンドロイドアプリのキャッシュ削除

2995-logo

アンドロイドアプリは、必要に応じてキャッシュデータを保存する。
アプリを使っている間に、いつのまにかキャッシュが増加して、ストレージを圧迫していくことになる。
アプリのキャッシュは設定のアプリケーション管理で、消去できる。またAndroid4.2からは一括でキャッシュを消去する機能が追加された。
4.2より前のOSで、全てのアプリのキャッシュを一括消去するには、キャッシュクリーナーやタスクキラーと呼ばれるユーティリティアプリを使うとよいだろう。

ゲームや役に立つアプリをいきなり作ろうと思っても、まずアイデアが浮かばないのが現実だろう。そんなときは、ユーティリティアプリから始めて見るのはいいかもしれない。

続きを読む »