MicrosoftのWindows Apps Teamが6月7日(米国時間)に公開したブログ記事が興味深い。タイトルは「シングルプロセスモデルにおけるバックグラウンドの活動」というもので、Windows 10 Anniversary Updateでバックグラウンドに移行したアプリケーションの動作が変化すると説明している。プロセスを中断 (Suspended) させるロジックは以前のWindowsから引き継いだ機能だが、さらに改良を加えようという話だ。

同ブログはUWP(ユニバーサルWindowsプラットフォーム)アプリケーション開発者向けに書かれた記事のため、複雑な部分は割愛しつつ、その特徴を紹介したい。まず、GitHub上のサンプルコードを確認するかぎり、ビルド14295から加わった「EnteredBackground」と「LeavingBackground」という2つの新イベントによって、アプリケーションの推移や可視化を可能にしている。

Windows 10 バージョン1611上のUWPアプリケーションのフォアグラウンド/バックグラウンド/中断と切り替わるライフサイクルを図に示したもの(公式ブログより)

「EnteredBackground」は、フォアグラウンドでなくなった状態を把握し、UWPアプリケーションはバックグラウンドへ移行する。以前はユーザーがアプリケーションを終了する際、アプリケーションの状態を保存するサスペンドコールを利用していた。だが、現在のWindows 10 Insider Previewで動作するアプリケーションは、バックグラウンドでも実行状態を継続し、サスペンドの状態に移行しない。トリガーなどによる活性化によって素早くフォアグラウンドに切り替えやすくすると同時に、セッション情報を保存するのがEnteredBackgroundイベントだ。

「LeavingBackground」は、UWPアプリケーションのUIが表示される直前に発生するイベント。以前はUIを呼び出す際、活性化もしくはレジュームイベントハンドラーを使用していたが、LeavingBackgroundを使用することで、フォアグラウンド/バックグラウンド/中断をスムーズに移動するシングルプロセスアプリケーションの開発が可能になるとMicrosoftは説明している。あらためて強調するとフォアグラウンド/バックグラウンド間の移行方法を変更し、使用していないアプリケーションが中断状態に移行すること自体は以前と変わらない。

バックグラウンドトリガーの活動。UWPアプリケーションは基本的に終了せずフォアグラウンドとバックグラウンドを切り替える(公式ブログより)

公式ブログでは簡単なサンプルコードを示しつつ、サービスとして動作させるUWPアプリケーションやバックグラウンドでメディア再生を行うアプリケーションの書き方を説明しているので、プログラムに興味がある方は一読すると面白いだろう。

GitHubからダウンロードしたサンプルコードでビルドしたUWPアプリケーション

気になるのはメモリー管理である。使っていないアプリケーションのためにメモリーを割くのは得策ではないからだ。もちろんこの点も考慮され、EnteredBackgroundでアプリケーションをバックグラウンドへ移動させる際はメモリー制限が発生する。本稿を執筆するにあたってWindows 10 Insider Preview ビルド14361でUWPアプリケーションの動作を検証してみた。下図はUWPアプリケーションの「電卓」を最小化するなどアクションを実行したものだが、少なくとも最小化直後に使用するメモリーが減少することはなかった。だが、半日ほど放置すると大幅に減少している。

「電卓」の実行ファイル(厳密にはトリガー)である「Calculator.exe」を実行した状態。プライベートワーキングセットは16284KB(実際には数十KBほどブレがあった)

「電卓」を最小化してバックグラウンドトリガーを発生されると、状態が「中断」に変化したが、この時点でプライベートワーキングセットの差は微々たるものだった

さらに放置し、他の作業を行っているとプライベートワーキングセットは556KBまで縮小した

これは冒頭で述べたWindows 8時代に加わった「Reclaiming memory」に持たされた機能によって現れた結果だと推察するが、MicrosoftとしてはWindows 10 Insider Preview ビルド10525で導入したCompression Store(圧縮ストア)もあるため、アプリケーションベースではなく別のレイヤーで管理するつもりなのだろう。

どのビルドから加わったのか確認できないが、Windows 10 Insider Preview 14352の「タスクマネージャー」では、実際にCompression Storeの数値を確認できるようになった

本ロジックを導入した理由をWindows Appsチームは明確に述べていないが、察するにUWPアプリケーションをスマートフォン用アプリケーションと同じように素早く切り替えるライフサイクルという概念を、Windowsストアアプリ時代から一歩先に進めるため必要だったと思われる。ここから生み出されるUXが我々のPC利用スタイルに及ぼす影響は追って報告したい。

阿久津良和(Cactus)