ユーザーがほとんどすべてが類似しているが、複数のウィンドウでの同時作業のサポートが異なる2つのアプリケーションから選択する必要がある場合、そのようなサポートを提供するものを選択するのは驚くことではありません。

この記事から、Androidのマルチウィンドウモードと、独自のアプリケーションを構築する際にこの機能を使用する方法について学習します。
復習
Androidで複数のウィンドウを同時に操作することは、アプリケーションを他の多くのアプリケーションと区別し、競争上の優位性をさらに高めることができる興味深い機能です。 Samsung、Ramos、Huaweiなどの多くのOEMおよびODMは、コアAndroidシステムを更新しています。 特に、マルチウィンドウのサポートを導入しています。 彼らは、スマートフォンやタブレットの魅力を高め、そのような機能をサポートしていないデバイスの大部分と区別するためにこれを行います。

マルチウィンドウモードを使用するシナリオ
予備情報
2012年6月、 Cornerstoneが導入されました。これは、Androidでのマルチタスク用の最初のオープンソースプラットフォームです。 2012年8月、サムスンはマルチウィンドウ操作をサポートする最初のデバイスをリリースしました。 2013年から現在まで、Androidの複数のウィンドウでの同時作業をサポートするためのソリューションの爆発的な成長が見られます。
2015年5月、Android M Developer Previewがリリースされました(今日、7月にPreview 2が既に利用可能です)。 Android M(6.0)の公式リリースは2015年秋に予定されています。 他の技術革新の中でも、Android M Preview 2はマルチウィンドウモードをサポートしているという点で注目に値します。

Androidでのマルチタスクソリューションの開発
複数のウィンドウを操作するには、2つのアプローチがあります。これは、フローティング(フローティング)ウィンドウとドッキング(ドッキング)ウィンドウの使用です。 マルチウィンドウモードで作業する主な可能性の中で、ウィンドウの開閉(オープン/クローズ)、サイズの変更(リサイズ)および相対位置(スワップ)に注意することができます。 ウィンドウの開閉は、それぞれマルチウィンドウモードを有効または無効にします。 サイズ変更機能を使用すると、ウィンドウのサイズを調整できます。 ウィンドウの位置変更は、ウィンドウを交換できるアクションです。

マルチウィンドウモード
2013年、市場には複数のウィンドウで動作するように設計された多くのソリューションが登場しました。 OEMおよびODM、独立系ソフトウェアベンダー、オープンソースコミュニティによって開発されました。 以下の表では、Android環境でマルチウィンドウ作業を整理するためのさまざまなテクノロジーの比較を見つけることができます。
製品 | 礎石 | 目立つ | Xposed | ティエト |
説明
| Androidマルチタスクフレームワーク
| フローティングウィンドウアプリケーションの作成に使用できるオープンソースライブラリ。
| ドッキングウィンドウをサポートするマルチウィンドウアプリケーション
| このプロジェクトの目的は、デスクトップPCでの作業に似たデスクトップ環境を作成することです。
|
ウィンドウの開閉、サイズ変更、フルスクリーンへの拡大のサポート
| はい
| はい
| はい
| はい
|
ウィンドウスタイル
| 修正済み
| フローティング
| 修正済み
| ドッキングおよびフローティング
|
コード修正
| Androidプラットフォームレベル
| アプリケーションレベル
| Androidプラットフォームレベル
| Androidプラットフォームレベル
|
アプリケーションサポート
| すべてのアプリケーションがサポートされていますが、SurfaceViewの動的構成は利用できません。
| いくつかのサポートアプリケーション。 たとえば、電卓。
| ソリューションの互換性と安定性を改善する必要があります。
| すべてのアプリケーションをサポートします。
|
Android版
| Android 4.1。 -Android 4.4。
| Android 4.1。 -Android 4.4。
| Android 4.4。
| Android 4.4
|
公式サイト
| クリックして
| クリックして
| クリックして
| クリックして
|
ソフトウェアアーキテクチャ
Androidプラットフォームのコードは、追加機能のサポートを装備するために変更できます。 Android OSアーキテクチャは、いくつかのレベルで構成されています。
Android 4.2およびAndroid 4.3の場合、シェル(ランチャー)およびその他のアプリケーションは、起動時に「メインスタック」と呼ばれる同じスタックに配置されます。 ご存知のように、マルチウィンドウモードでは、複数のウィンドウに対応するためにより多くのスタックが必要です。 そのため、システムクラスActivityManagerServiceを変更し、それにインターフェイスを追加してスタックを作成および管理する必要があります。 プラットフォームクラスWIndowManagerServiceを変更して、アプリケーションのグラフィカルな表現を管理できるようにするには、InputManagerを変更する必要があります。 これは、タッチイベントを対応するウィンドウにリダイレクトできるようにするために必要です。
Android 4.4およびAndroid 5.0のリリースにより、スタックを管理する方法が大きく変わりました。 シェルおよびその他のアプリケーションは、さまざまなスタックで実行できます。 複数のスタックのサポートとそれらを管理する機能がシステムに追加されました。 次の図は、Androidの異なるバージョンでスタックを操作する際の違いを示しています。

Android 4.3とAndroid 4.4のスタックでの作業の比較
それでは、Android 5(Lollipop)に注目しましょう。 Android OSは、コールバックメカニズムを使用して、アクティビティのインターフェイス機能を実行します。 ただし、制御機能はプラットフォームレベルで実装されます。 したがって、ここでは、ActivityManagerServiceとWindowManagerServiceの2つの重要なクラスを検討します。

Lollipopプラットフォームのソフトウェア構造
Lollipopでのアクティビティの管理
マルチウィンドウモードで動作する能力はスタックに依存するため、以下にスタックの作成方法と、このスタックでアクティビティを開始する方法を示します。 Lollipopでは、次の関数がIactivityManager.javaインターフェースに追加されました。
IactivityManager.javaインターフェースの新機能 | 説明 |
public void moveTaskToStack(int taskId、int stackId、boolean toTop) | タスクを別のスタックに移動する |
public void resizeStack(int stackBoxId、Rect境界)
| スタックのサイズ変更
|
public void setFocusedStack(int stackId)
| 選択したタスクにフォーカスを設定します
|
パブリックブールisInHomeStack(int taskId)
| タスクがHomeStackにあるかどうかを調べる
|
開始後、SystemServerプロセスはアクティビティ管理サービスとWindows管理サービスを呼び出します。 このプロセスを監視するために、コマンドの適切な場所にランタイム例外(RuntimeException)を追加できます。

Lollipopでスタックを作成するプロセス
スタックでアクティビティを開始する方法を見てみましょう。

スタックでのアクティビティの実行
Lollipopでは、次のコマンドがADBユーティリティに追加されました(Android Debug Bridge、Android debug bridge):
ADBチーム
| 機能
| 説明
|
ADBシェルAMスタックスタート
| Intentを使用して<DISPLAY_ID>で新しいアクティビティを起動します
| Kitkat 4.4では、ADBコマンドには次が含まれます。adb shell am stack create
Lollipop 5.0の場合:adb shell am stack create delete |
ADBシェルAMスタックMoveTask
| <TASK_ID>を現在のスタックからスタック<STACK_ID>に移動します。
| 使用法:adb shell am stack movetask task_id stackid true / false
注:これはキットカットでは機能しますが、ロリポップでは機能しません |
ADBシェルAMスタックサイズ変更
| スタックのサイズ<STACK_ID>とその位置を<LEFT、TOP、RIGHT、BOTTOM>に変更します
| 使用法:adb shell am stack resize task_id weight
|
Lollipopのウィンドウ管理
WindowManagerServiceは、ウィンドウ管理システムの中心部分です。 その機能には、入力イベントのスケジューリング、画面上のオブジェクトの位置およびグラフィック要素が表示される表面の制御が含まれます。


Android Graphics Architecture でのWindowsManagerServiceの役割
マルチウィンドウの問題
マルチウィンドウモードで作業する場合、ウィンドウのサイズ変更が可能です。 例は、ゲームアニメーションを表示するウィンドウのサイズを変更できない場合に知られています。 これの主な理由は、Android SurfaceFlingerサブシステムが出力画像のサイズを動的に変更できないことです。

SurfaceFlingerを使用するゲームはウィンドウのサイズを動的に変更できません
別の問題は、一部のアプリケーションがマルチウィンドウモードで正しく表示されないことです。 次の図では、計算機がマルチウィンドウモードで正しく表示されないことがわかります。 アプリケーションのレイアウトがすべてであり、そのような使用条件向けに設計されていません。

マルチウィンドウ操作用に設計されていないレイアウトの計算機
Android Mでのマルチモードのサポート
Android M Developer Preview 2は、Nexus 5、6、9、およびNexus Playerで起動できます。 そのようなデバイスがない場合、またはそのデバイスにプレビューステータスのOSをインストールしたくない場合は、Android Studioのエミュレーターを使用してAndroid Mに慣れることができます。 特に、今ではマルチウィンドウモードで作業するための標準ツールに興味があります。
このモードの動作を確認するには、AVD Managerツールを使用して新しい仮想デバイスを作成し、APIレベルMNCで利用可能なものの1つをシステムイメージとして選択するだけで十分です。 私たちの場合、それはx86_64イメージでした。 次に、エミュレータを実行し、開発者の設定セクションに移動して、そこでマルチウィンドウモードオプションを有効にする必要があります。 このオプションが見つからない場合は、このガイドをご覧ください。
今から楽しい部分です。 手始めに、いくつかのアプリケーションを実行できます。すべてが通常通りです。 ただし、最近開いたアプリケーションのリストを呼び出すためのボタンをクリックすると、ウィンドウのサムネイルのヘッダーに新しいアイコンが表示されます。 デフォルトでは、これはアプリケーションが全画面モードで起動していることを示すフレームです。 このアイコンをクリックすると、ウィンドウレイアウトのレイアウトを選択するためのメニューが表示されます。

マルチウィンドウモードのウィンドウレイアウト選択メニュー
その後、すべてが非常に明確です。 目的のレイアウトを選択し、マルチウィンドウモードをお楽しみください。

Android Mのマルチモード
Android Mの公式リリースでマルチウィンドウ機能が利用可能になるかどうかはまだ不明です。 ただし、たとえば、このモードのシステム計算機は快適です。 その結果、競争上の優位性からマルチウィンドウモードへのアプリケーションの適応が緊急のニーズに変わる日が近いと信じる十分な理由があります。
Androidの以前のバージョン用に設計されたアプリケーションに複数のウィンドウをサポートするようにしたい場合は、上記で説明したサードパーティの開発者のソリューションを使用します。 たとえば、コーナーストーンへ。
例:コーナーストーン
Onskreenは、Androidで複数のウィンドウを操作する最初のフレームワークであるCornerstoneを作成しました。 大画面とタブレットを搭載したデバイス向けに設計されています。 ソースコードはGithubからダウンロードできます。 Androidバージョン4.1および4.2での動作をサポートしています。 このOSの以降のバージョンでは、Cornerstoneはまだリリースされていません。 ただし、Android 4.2のソースコードを分析して、システムの技術的な詳細を調べることができます。

Android Jelly BeanのコーナーストーンMod
まとめ
Android OSを実行している多くのモバイルデバイスはIntel®プロセッサを使用しています。 開発者はどのようにアプリケーションを操作するユーザーエクスペリエンスを改善できますか? アプリケーションの競争力を高める方法 これらの質問により、Intel Architecture(IA)を搭載したデバイスの製品を継続的に改善することができます。 マルチウィンドウのサポートは、アプリケーションに競争力を与える便利な機能の良い例です。 これは便利なマルチウィンドウモードであり、ユーザーは複数のタスクを同時に実行できます。 たとえば、ビデオを見て、見ているものについて友人にレビューを書くことができます。 たとえば、ゲームをプレイしてそのレビューを読んでください。 現在、複数のデバイスがマルチウィンドウ操作をサポートしています。 たとえば、これらは、Remix OSを実行しているRamos i12、Teclast x98、およびCube i7タブレットです。

IAデバイスのマルチウィンドウモード
家庭での読書用
» Android 6.0マフィンコンセプトビデオが複数ウィンドウのクイック返信機能を表示
ご清聴ありがとうございました!