web-dev-qa-db-ja.com

Android SurfaceFlinger

SurfaceFlingerが常に画面に描画するために呼び出されるかどうかを尋ねたいのですが?例、画面へのJPGファイルの表示。

31
artsylar

SurfaceFlingerはnotウィンドウを描画するものです。ウィンドウにフレームバッファーを割り当てます。これは、アプリケーションで実行されているフレームワークがSurfaceFlingerと対話せずに直接描画します。ウィンドウを描画するときにSurfaceFlingerが関与する唯一の操作は、フレームの描画が完了したら、最終的な新しいフレームバッファーを画面に合成することです。

34
hackbod

はい、SurfaceFlingerはAndroidのコンポジターなので、表示されるすべてのものを取得し、結果のフレームがどのように見えるかを把握し、グラフィックカードのEGLインターフェイスを介して画面に表示するために送信します。

Android開発者Jeff Sharkeyが ナイトモード用に画面全体を傾ける で、投稿に表示されるすべての結果を制御するという考えを得ることができます。 このトピック についてよく見えるビーマープレゼンテーション。

17
Frank

http://pierrchen.blogspot.jp/2014/02/what-is-surfaceflinger-in-Android.html

SurfaceFlingerはAndroidシステムサービスであり、すべてのアプリケーションとシステムサーフェスを、最終的にディスプレイコントローラーによって表示される単一のバッファーに合成します。

上記のステートメントを拡大してみましょう。

SurfaceFlingerはシステム全体のサービスですが、Sensorや他のサービスと同様に、アプリケーション開発者が直接利用することはできません。 UIを更新するたびに、SurfaceFlingerが起動します。これが、SurfaceFlingerがバッテリー排出器である理由です。

アプリケーションサーフェスの他に、ステータスバー、ナビゲーションバー、回転が発生したときにシステムが回転アニメーション用に作成したサーフェスなどのシステムサーフェスがあります。ほとんどのアプリケーションにはアクティブなサーフェスが1つしかありません-現在のフォアグラウンドアクティビティの1つです。他のアプリケーションには、SurfaceViewがビュー階層で使用されるかプレゼンテーションモードが使用されるときに複数あります。

SurfaceFlingerは、これらすべての表面の合成を担当します。よくある誤解は、SurfaceFingerは描画用だということです。正しくありません。描画はOpenGLの仕事です。興味深いことに、SurfaceFlingerは合成にもopenGLを使用しました。

コンポジションの結果は、システムバッファーまたはネイティブウィンドウに配置されます。これは、データをフェッチするディスプレイコントローラーのソースです。これは画面に表示されるものです。

15
pierrotlefou