web-dev-qa-db-ja.com

Androidウィンドウとは何ですか?

AndroidのWindowとは何ですか?

Androidの最上位レベルはActivityと呼ばれ、これが表示される画面だと思いました。

誰かがAndroidのWindowが何であるかを教えてもらえますか?1つまたは複数ありますか?.

67
user1233587

アクティビティは、ウィンドウと呼ばれるものです。

技術的に言えば、アクティビティはウィンドウを作成します。

それらの多くを持つことができますが、通常は同期的ではありません。追加情報を要求するには、ダイアログを呼び出すか、別のアクティビティにインテントを起動します。

詳細については、 このリンクをご覧ください

9
Knossos

[UPDATE](元の答えの後にWindowについて学んだことを共有させてください)

1つの文で、[〜#〜] a [〜#〜]Windowは、1つのビュー階層を持つ長方形の領域です。下の画像の色付きの長方形はウィンドウです。

enter image description here

ご覧のとおり、1つの画面に複数のウィンドウがあり、 WindowManager がそれらを管理します。現在の画面のウィンドウリストは、 Hierarchy Viewer またはadb Shell dumpsys window

階層ビューアーの例のウィンドウリスト: enter image description here

(以下は元の答えです)


同じ質問がありましたが、これが皆さんのお役に立てば幸いです。

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 )からスライド全体をダウンロードします

enter image description here

つまり、一言で言えば:

  • Activityにはウィンドウ(ユーザーインターフェイスを描画するウィンドウ)があり、
  • Windowには、単一のSurfaceとそれに接続された単一のビュー階層があります。
  • ビューを保持するSurface include ViewGroup.
153
김준호

簡単に言うと:

Application --->
  Activity --->
    Window Manager --->
      Window --->
        Surface ---> 
          Canvas --->
            View Root ---> 
              View Group --->
                View ---> 
                  Bitmap/Open GL panel ---> 
                    Current Surface Buffer ---> 
                      Surface Flinger --->
                        Screen

Android: Window, Surface, Canvas, and Bitmap これは、ウィンドウ、サーフェス、キャンバス、およびビットマップ間での相互作用がどのように発生するかについての非常に基本的で単純な概念的概要です。

13
Sabeeh