31

=========================

更新: 数日間のグーグルと実験の後、私はそれらのばかげた質問のほとんどに対する答えを見つけました. 私が提出した回答を参照してください。

=========

Androidウィンドウの責任は何ですか?

ここにいくつかの質問があります:

  • 入力を収集してディスパッチする責任がありますか?
  • ビューとウィンドウの関係は? DFBの面と窓の関係と同じ?
  • アクティビティとウィンドウの関係は? 各アクティビティにはウィンドウがありますか?
  • アプリケーションからウィンドウを作成することはできますか? そして、いつそれが必要ですか?
  • Android はマルチウィンドウをサポートしていますか?

編集:さらに質問を追加:

  1. Window、View、Canvas、Surface などのさまざまなクラスの責任と、それらが互いにどのように連携するか

  2. 通常、アクティビティにはいくつのウィンドウがありますか?

3.1 つのアクティビティ内のすべてのビューが Window にアタッチされますか? attach とはどういう意味ですか?

  1. すべてのウィンドウには表面がありますか? すべてのキャンバスには表面がありますか?

  2. View は focus/keyEvent/ manager を担当しますが、Cavus は「描画」操作のみを担当します。

  3. WindowManagerはウィンドウのスタックを担当していますか? それは SurfaceFlinger とどのように関連していますか?

  4. View は Surface を所有していません。ビューに含まれる Window は所有していますか?

  5. ビューは、surface.lockCanvas() を呼び出して取得したキャンバスを使用して自分自身を描画します。

  6. onDraw(Canvas) はいつ呼び出されますか? どのように、誰がキャンバス パラメータを渡しますか?

  7. キャンバスにはサイズがありますか? Window のサーフェスは常にフルスクリーンになりますか?

もう一度編集:

Romain Guy http://www.youtube.com/watch?v=duefsFTJXzc&feature=feedwll&list=WLによって提供されたこの素晴らしいプレゼンテーションを見た後、いくつかの質問が解決され、さらにいくつかの質問が追加されました:)

  1. すべてのアクティビティには 1 つの ViewRoot があり、したがって 1 つのウィンドウがありますか?
  2. 明示的にウィンドウを作成する必要はありますか? ウィンドウの表面は常にフルスクリーンになりますか?
  3. ステータス バーは別のウィンドウに表示されますか?
  4. 表面の大きさは?それは常にフルスクリーンになりますか?
4

4 に答える 4

14

ウィンドウは入力の収集とディスパッチを担当していますか?

いいえ。ViewRoot がこれを担当します。

ビューとウィンドウの関係は? DFBの面と窓の関係と同じ?

?

アクティビティとウィンドウの関係は? 各アクティビティにはウィンドウがありますか?

はい、ほとんどの場合。ただし、SurfaceView には独自のウィンドウがあります。そのため、Activity に SurfaceView がある場合、複数の Window があります。

アプリケーションからウィンドウを作成することはできますか? そして、いつそれが必要ですか?

必要はありません。

Android はマルチウィンドウをサポートしていますか?

もちろん。HierachyView を使用すると、システムに複数のウィンドウが存在することが明確にわかります。

Window1. 、ViewCanvas、などのさまざまなクラスの責任はSurface何ですか? また、それらはどのように相互に連携していますか? 2.通常、アクティビティにはいくつのウィンドウがありますか?

通常は 1 つです。

3.1 つのアクティビティ内のすべてのビューがウィンドウに関連付けられますか? attach とはどういう意味ですか? 4.すべての窓には表面がありますか? すべてのキャンバスには表面がありますか?

すべてのウィンドウにはサーフェスがあり、サーフェスに描画するためにSurface使用します。Canvas

5.ビューはフォーカス/キーイベントの管理を担当しますが、キャンバスは「描画」操作のみを担当しますか?

はい。

6.WindowManagerはウィンドウのスタックを担当していますか? それはどのように関係していSurfaceFlingerますか?

WindowManager の責任がわからない。(TODO)

SurfaceFlinger異なるウィンドウ/アクティビティに関連付けられたサーフェスを構成するために使用されます。

7.View は Surface を所有しておらず、View に含まれる Window は所有していますか?

ビューは Canvas を使用してサーフェスに描画します。ビューが接続されているウィンドウがサーフェスを所有します。

onDraw(Canvas)これは、派生クラスでメソッドをオーバーライドする必要がある場合に、カスタマイズ ビューを実装することで理解できます。

8.view は、surface.lockCanvas() を呼び出して取得したキャンバスを使用して自分自身を描画しますか?

はい。

9.いつ、どのようにonDraw(Canvas)呼び出され、誰がキャンバス パラメータを渡しますか?

onDraw()RootViewは、invalidate が呼び出されたときに and によって呼び出されます。canvas パラメータは RootView から渡されます。

10.キャンバスにはサイズがありますか? ウィンドウの表面は常にフルスクリーンになりますか?

はっきりとは言えません。しかし、カスタマイズ ビューを作成すると、onDraw(Canvas) から取得したキャンバスのサイズがフル スクリーンになります。

ただし、私の理解では、パフォーマンス上の理由から、ウィンドウの Surface を常にフルスクリーンにする必要はありません。しかし、この仮定は検証されていません。たとえば、statusBar ウィンドウは全画面表示にしないでください。

1.すべてActivityの人に1つViewRoot、したがって1つがありWindowますか?

はい。

2.ウィンドウを明示的に作成する必要はありますか? ウィンドウの表面は常にフルスクリーンになりますか?

Window 自体を明示的に作成する必要はありません。

3.ステータスバーは別のウィンドウに表示されますか?

はい。

4.表面の大きさは?それは常にフルスクリーンになりますか?

于 2011-11-23T06:08:37.483 に答える
4

あなたがそれらすべての質問をしたことに感謝します。1) 私の知る限り、すべてのアクティビティには少なくとも 1 つの ViewRoot があり、すべての ViewRoot には少なくとも 1 つのウィンドウがあります。別のウィンドウにステータス バーを配置できます。 4) ウィンドウの一部にすることはできません。

ここで何か間違ったことを述べた場合は、私の理解を修正してください。

于 2011-11-22T08:05:16.297 に答える
1

Android: ウィンドウ、サーフェス、キャンバス、およびビットマップの概念

ここでは、ウィンドウ、サーフェス、キャンバス、およびビットマップ間で相互作用がどのように発生するかについて、非常に基本的で単純な概念の概要を示します。hackbodによるこの回答
を 見てください。すばらしい説明です。

于 2016-07-21T06:39:55.977 に答える
0

質問に対して

アクティビティとウィンドウの関係は? 各アクティビティにはウィンドウがありますか?

@pierrotlefou に同意しないでください。google docでは、SurfaceView が Window ではなく専用のサーフェスを提供するためです。

サーフェスは、SurfaceView を保持するウィンドウの背後にあるように Z オーダーされます。SurfaceView はウィンドウに穴を開けて、その表面を表示できるようにします。

于 2019-08-24T06:43:26.240 に答える