さて、今回は中断していたAndroid Mの続き、Nexus 5Xで具体的にAndroid 6ことMarshmallow(以下マシュマロ)の機能を見ていくことにしましょう。
Android 6の特徴の1つとして電力管理系機能があります。Android 5ことLollipopも電力管理を特徴としていましたが、実際には、あまり成功したとはいえませんでした。ハードウェアとアプリの組み合わせによっては、消費電力がかえって大きくなってしまった機種もあるようです。しかし、アプリの消費電力を測定可能にしたり、周期的な作業のスケジュールをシステム側に任せる「スケジュールド・ジョブ」機能の追加など、lollipopに含まれる「Project Volta」の成果は、マシュマロの低消費電力化の礎となったようです。
マシュマロには、大きく2つの電力関係の機能が組み込まれています。1つは「Dozeモード」で、これは、置きっ放しにした場合など、「使われていない」場合にシステム全体を低消費電力状態にするものです。もう1つは、「Appスタンバイ」で、ユーザーが操作していないアプリを停止させて、消費電力を削減する機能です。それぞれを見ていくことにしましょう。
Dozeモード
Dozeモードは、以下の条件で起動します。
- 充電中ではない
- 画面が消えている
- 一定時間静止している(持ち歩いている状態ではない)
Dozeモードに入ると、アンドロイドは、「ネットワークアクセス」、「Wi-Fiスキャン」、「同期処理」、「スケジュールド・ジョブの実行」、「アラーム処理」(時計のアラームではなく、指定時間に処理を実行するもの)を禁止します。また、アプリがシステムがスリープ状態に入ることを妨げる「ウェイクロック」を無視します。システムはネットワークをアクセスするアプリや、CPUを集中的に利用するサービスを禁止します。
しかし、Dozeモードに入った後、システムは定期的にDozeモードから短時間抜け出します。これを「メンテナンスウィンドウ」といいます。このメンテナンスウィンドウの期間は、停止されている同期やジョブ、アラームを再開し、アプリにネットワークアクセスを許可します。
ただし、メンテナンスウィンドウは、短時間で終了し、その間隔は、だんだんと長くなっていきます。このようにして、Dozeモードにいる時間が長くなり、より電力消費を抑えることが可能です。
少なくともDozeモードのため、スマートフォンを使わずに放置しておいたのに、アプリが暴走状態で電池を消費しつくしていたということはなくなるはずです。
Appスタンバイ
Appスタンバイは、ユーザーが長い間操作していないアプリを「アイドル」と判断して停止させる機能です。アイドルと判断された場合、ネットワークアクセスが禁止され、同期処理やジョブ起動が停止します。ただし、アイドル状態が長時間続く場合、一日に一回ネットワークアクセスを行う機会が与えられます。
アンドロイドがアプリをアイドル中ではないと判断する条件は、
- ユーザーが明示的に起動したアプリ
- アプリがフォアグラウンドで処理中
- アプリがロックスクリーンや通知領域でユーザーが見ることができる通知を生成する
となっています。
これから見るに、ユーザーが直接起動しないアプリ、たとえば、システムの起動時に自動的に起動して、通信を行うようなアプリやサービス(画面を持たないアプリ)などが該当します。これらのアプリは、ユーザーが起動すれば、Appスタンバイの対象から外れますが、それまでは停止されたままになると思われます。こうしたアプリには、コミニュケーション系やSNS系などのアプリがあります。インストールしたけど、めったに使わないといったアプリは、起動するまではスタンバイ状態になるため、あまり電力を消費しなくなります。
ただし、条件にあるようにユーザーが明示的に起動したアプリは対象から外れることから、こうしたアプリがバッテリを消費してしまう可能性は残ります。しかし、逆にこうしたアプリは、今後は、大きく目立つことになるでしょう。すでにLollipopから、アプリごとの消費電力を測定できるようになっているため、設定の電池で、リストの上位に来てしまうからです。
マシュマロでは、アプリが、Appスタンバイのために正しく動作できない場合には、アプリを登録することで、対象外とすることが可能です。これは、「設定」にある「電池」のメニューにある「電池の最適化」(写真01)で行います。すでにGoogle開発者サービスなどが対象になっています(写真02)。
ただし、このリストへの登録は、ユーザーが明示的に行う必要があり、アプリ自身がこれを登録するようなものは、Playストアでは配布できないようになっています。
マシュマロでは、USBポートの動作も変更になりました。Lollipopまでは、USBポートにPCなどのUSBホストを接続するとMPTによるファイル転送が可能な状態になっていました。しかし、マシュマロでは、デフォルトは「充電のみ」となっていて、ファイル転送などを行う場合には、ユーザーが手動でUSBポートを切り替える必要があります(写真03)。MIDI入力など機能が増え、自動判断が困難になり、デフォルトでクライアント動作することで問題が出る可能性があるからと推測されます。
写真03: Android 6.0では、USB接続はデフォルトで充電のみとなり、ファイル転送などは手動でモードを切り替える必要がある。写真にある「電源」機能は、ハードウェア依存の機能と思われ、Android 6.0にアップグレードしたNexus9などでは表示されなかった |
なお、Nexus 5Xは、USBポートにTypeCコネクタが使われています。充電器を見ると出力は5V3Aになっています。5V×3A=15Wとなるため、ケーブルは、USB TypeCでなければなりません。従来のUSBケーブルでは、USB 3.xの4.5Wが最大になり、USB Battery Chargingに対応していたとしても7.5Wが最大になるからです。つまり、Nexus 5Xは、USB Type Cケーブルを利用することで15Wの電力の供給を可能にしているわけです。
なお、Nexus 5Xのバッテリ容量は2700mAhとなっているのでバッテリ電圧が3.7Vだとすると約10Whになります。カタログによると10分間の充電で4時間動作する急速充電の機能があり、そのために15Wの供給が必要なのだと思われます。
Dozeモードの効果は?
実際にDozeモードを試してみました。FacebookやTwitterといったアプリをインストールしておき、フル充電したNexus 5Xを放置した場合(無線LANは使わず、LTEのみ利用)のバッテリの消費状態が(写真04)です。ときどき確認用に操作はしていますが、大半の時間は単に放置したままです。推定のバッテリ寿命で約6日、4日間動作させて、テストを打ち切りました。この感じからすると、1日あたり17パーセント弱という感じで、半日なら8パーセントというところでしょう。つまり、帰宅して充電を忘れて一晩放置したとしても1割も減らないわけです。
Dozeモードは、機器自体が静止状態にないと入りません。つまり、持ち歩いている間はDozeモードに入らないわけです。なので、今度は、同じ状態にして胸のポケットにしばらく入れてみました。そのときの消費電力のグラフが(写真05)です。最初に2時間以上放置してDozeモードとし、そのあと6時間ほど筆者がポケットにいれたままにしました。時々画面を確認する程度しか使っていません。ですが、明かに前後にある静止状態とは消費電力が違っています。これからDozeモードは比較的うまく動作していると考えられます。
Dozeモードに入るような状態(まったく使っていない時間)の電力消費は完全に無駄です。かといって電源オフにしてしまうと起動するのに時間がかかりが面倒です。一般にシステムの消費電力を低くする状態に入ると、通常状態の復帰に時間がかかるようになります。しかし、Dozeモードからの復帰は、通常のスリープとほとんど区別がつきません。おそらく、電源を入れようとNexus 5Xを手に持ったときにすでにDozeモードから抜けだし、ユーザーが電源ボタンなどを操作した段階では、通常のスリープに復帰しているのだと思われます。
なお、DozeモードのテストではMVNOのデータ通信専用SIMを入れてみたのですが、SMS付きでなくても、接続を正しく認識し、消費電力が増えることはないようです(写真06)。前世代であるNexus 5では、音声やSMS機能のないSIMでは、圏外と判定され通信は可能なものの、セルスタンバイで大きく電力を消費していました(写真07)。
写真06: Nexus 5Xでは、音声、SMS機能なしのデータ専用SIMでも接続状態と判断されている |
写真07: 前世代のNexus5では、データ専用SIMでは、データ通信が可能(通知領域にLTEが表示されている)だが、音声やSMS機能がないため、ずっと圏外と判断されている |