スマートフォンのメモリ管理の仕組みを理解する

メモリ管理ということで今回は少し技術屋さん向きの内容ですが、電池持ちや動作の快適性を確保するための予備知識的なものです。

Androidの電池持ちや動作の快適性を追求していく上で調べた内容をまとめてみました。
基本的にはAndroidのお話になりますが、iPhone(iOS)でも同様に管理されているものと思いますので、本文中はスマートフォンと記述しています。

アプリ終了時の挙動

スマートフォンでは、ユーザーがアプリを終了しても、アプリのために処理を行うプロセスというものが残ります。
プロセスは、アプリの一部ですが、アプリの実行状態とは切り離されていて、ユーザーの意思とは無関係に、開発者の意図やスマートフォンのシステムにより制御されています。
例えばアプリで何かをダウンロードしているときにアプリを終了しても、裏側でプロセスは起動し続けているため正常にダウンロードを完了できるのはこのためです。

プロセスは動作を終えると待機状態に入ります。
プロセスが待機している間は、メモリが確保されているように見えますが実際には使われておらず、電池を消費するわけでもメモリを消費するわけでもありません
待機しているプロセスは、スマートフォンのシステムによりメモリの空き領域が足りなくなった時点で、終了され、メモリが解放されます。
ちなみに、プロセスには優先順位が付けられ、スマートフォンのシステムが終了させるプロセスを判断するように作られています。

少し技術的なお話をすると、プロセスを都度、終了、開始していると、よく使うアプリの場合は、それだけで遅さを感じたり電池を消費したりします。
このため、スマートフォンでは、動作を終えたプロセスもバックグラウンドで残しておくように設計されています。

バックグラウンドで動作するアプリ

裏側で自動的に動作しているアプリというものも存在します。
これらは、通常ユーザーが意識して使うアプリと同様に、動作するタイミングで電池もメモリも消費します。

バックグラウンドで動作するアプリは、ブロードキャストレシーバと呼ばれる仕組みを使い、何かが発生したタイミングで、起動するように設定されたアプリをシステムが見つけ出して動作させています。
ブロードキャストレシーバは、例えば、特定の時刻だったり、位置情報の変化を検知してシステムに通知します。
通知を受け取ったアプリの処理が終了した後、または一定の時間内に処理を終了できずに強制終了された場合に、通常のアプリと同様にプロセスは待機状態になります。

ブロードキャストレシーバとは別にサービスと呼ばれる仕組みも存在します。
これは、例えばアカウントの同期だったり、音楽再生や目覚ましのようなものです。

サービスは基本的に通常のアプリの待機プロセスと同じように扱われ、メモリ不足の際はシステムにより終了されることがあります。
ただし、動かしておかなければならないのに終了させたということをシステム側は記憶していて、メモリに空きができた時に自動的に再起動されます。

目覚ましや音楽再生は勝手に止まらないよね?と思ったかたは鋭いです。
サービスにはアプリの起動状態と同じように(動作中と)見なすことができる仕組みがあり、この場合はプロセスは待機状態ではなく動作状態となっています。
この状態の時は、ユーザーが終了させる(プロセスを待機させる)ことができるようになっています。

でも遅くなったりするよね?とか、動作や電池持ちを改善するためにタスクキラー系アプリは有効なのかというお話はもう少し頭の中を整理してから書きたいと思っています。

スマートフォンのメモリ管理の仕組みを理解するへのコメント

この文章のみでは解りにくい。パソコンとの比較等ほしい。

投稿者: kbs

文章にするだけでもなかなか苦労しました。
最初にお断りを入れている通り、この記事はちょっと初心者向けの内容からは外れます。
パソコンではOSにもよりますが、基本的にはアプリ側に任せているものがほとんどではないでしょうか。
このあたりはスマートフォン独特の機能だと思っています。

投稿者: jun

kbs へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です