AndroidのWindow
とは何ですか?
Androidの最上位レベルはActivity
と呼ばれ、これが表示される画面だと思いました。
誰かがAndroidのWindowが何であるかを教えてもらえますか?1つまたは複数ありますか?.
アクティビティは、ウィンドウと呼ばれるものです。
技術的に言えば、アクティビティはウィンドウを作成します。
それらの多くを持つことができますが、通常は同期的ではありません。追加情報を要求するには、ダイアログを呼び出すか、別のアクティビティにインテントを起動します。
詳細については、 このリンクをご覧ください 。
[UPDATE](元の答えの後にWindow
について学んだことを共有させてください)
1つの文で、[〜#〜] a [〜#〜]Window
は、1つのビュー階層を持つ長方形の領域です。下の画像の色付きの長方形はウィンドウです。
ご覧のとおり、1つの画面に複数のウィンドウがあり、 WindowManager がそれらを管理します。現在の画面のウィンドウリストは、 Hierarchy Viewer またはadb Shell dumpsys window
。
階層ビューアーの例のウィンドウリスト:
(以下は元の答えです)
同じ質問がありましたが、これが皆さんのお役に立てば幸いです。
Android Developer Documentation によると、
"各アクティビティには、ユーザーインターフェイスを描画するウィンドウが与えられます。"
そして、 Dianne Hackborn 、Androidフレームワークエンジニア、いくつかの定義を与えました ここ 。
windowは、基本的にはデスクトップ上のウィンドウのようです。 Itには、ウィンドウのコンテンツがレンダリングされる単一のSurfaceがあります。アプリケーションはウィンドウマネージャーと対話してウィンドウを作成します。 Window Managerは、各ウィンドウのSurfaceを作成し、描画のためにアプリケーションに提供します。アプリケーションは、Surfaceで必要なものを何でも描画できます。 Window Managerにとっては、単なる不透明な長方形です。
A Surfaceはオブジェクトです画面に合成されるピクセルを保持する。画面に表示されるすべてのウィンドウ(ダイアログ、フルスクリーンアクティビティ、ステータスバー)には、描画する独自のサーフェスがあり、Surface Flingerはこれらを正しいZオーダーで最終表示にレンダリングします。通常、サーフェスにはダブルバッファーレンダリングを行うために複数のバッファー(通常2つ)があります。アプリケーションは、アプリケーションが終了するのを待たずに、最後のバッファーを使用してサーフェスフィンガーが画面を合成している間に次のUI状態を描画できますお絵かき。
ビューは、ウィンドウ内のインタラクティブなUI要素です。 ウィンドウには単一のビュー階層がアタッチされており、ウィンドウのすべての動作を提供します。 ウィンドウを再描画する必要があるときはいつでも(ビューがそれ自体を無効にしたなど)、これはウィンドウのSurfaceで行われます。 Surfaceがロックされ、描画に使用できるCanvasが返されます。描画トラバーサルは階層ごとに行われ、各ビューのキャンバスを引き継いでUIの一部を描画します。完了すると、Surfaceのロックが解除されてポストされるため、描画されたばかりのバッファが前景にスワップされ、Surface Flingerによって画面に合成されます。
また、 Romain Guy のプレゼンテーションから他の情報を見つけました(彼の講演はサンフランシスコで見ることができますAndroidユーザーグループ here 、および here )からスライド全体をダウンロードします
つまり、一言で言えば:
Activity
にはウィンドウ(ユーザーインターフェイスを描画するウィンドウ)があり、Window
には、単一のSurface
とそれに接続された単一のビュー階層があります。Surface
include ViewGroup
.簡単に言うと:
Application --->
Activity --->
Window Manager --->
Window --->
Surface --->
Canvas --->
View Root --->
View Group --->
View --->
Bitmap/Open GL panel --->
Current Surface Buffer --->
Surface Flinger --->
Screen