さて前回は Xperia mini のカーネルを入れ替えて有効なメモリを少し増やした。印象としては大分マシになった感じだったのだが、使っている内にはまだメモリ不足のためと思われるもたつきが出てくる。空きメモリ量を確認すると、総量としてはそこそこ空いているのに、メモリ不足の症状が出ることがある。これはきっとメモリの断片化というやつだ。これを予防するには空きメモリをより積極的に確保することだ。

そもそも Android は、空きメモリが一定量を下回った時に、プロセスを積極的に終了させるモードに入る。しかし閾値がかなり高めに設定されている場合が多く、この機能はなかなか発動しない。それ以前に、キャッシュされたバックグランドのプロセスは、使われない状態が続くと、OS によって段階的にメモリを解放させられ、最終的には完全に終了させられるが、メモリが少ない端末ではやりくりに詰まりやすい。

そこで所謂「タスクキラー」的なアプリが登場するのだが、これはあまりオススメできない。なぜなら、こうしたアプリでは、終了させてはいけないものを KILL したり、ライフサイクルを無視してアプリを強制終了させることで却ってメモリリークを起こしたりすることもあるし、何よりメモリ不足解消のためにそれ自体がメモリを食うものを常駐させるのは望ましくない。


その代わりに Android の「開発者向けオプション」を使う方法を紹介する。「開発者向けオプション」は、4.0・4.1 ではシステム設定の中にある。4.2 以降では、システム設定→端末情報またはタブレット情報→ビルド番号を連打すると、システム設定の中に現れる。開発者向けオプションの中で、「アクティビティを保持しない」と「バックグラウンドプロセスの上限」は、本当にメモリが逼迫しているのなら、どちらかを使うと影響を緩和できる場合がある。これらは OS が持つ機能であるため安全で、余計にメモリを食うこともない。

「アクティビティを保持しない」というのは、ユーザの目に見えない位置へ映ったアプリの画面の状態を直ちに破棄するということで、そうすることで空きメモリを積極的に確保できる。ただし、直前に使ったばかりのアプリであっても、もう一度使おうとした時にアクティビティの初期化から始まることになる。従って、やや緩慢に感じられる場合もあるかもしれないが、メモリが不足しがちな環境ではただでもアクティビティの破棄が起きやすいので、それを積極的にすることで総体的にはより快適になる可能性がある。

「バックグラウンドプロセスの上限」の設定はより強力で、キャッシュするプロセスの数を制限することで空きメモリを積極的に確保できる。ここで設定できる上限の4でもかなり少なく、ほとんど毎回アプリの初期処理からやり直すことになる。そのため弊害もより大きいが、「アクティビティを保持しない」で満足できない場合には試してみると良いかもしれない。