画面に描画するためにSurfaceFlingerが常に呼び出されるかどうかを尋ねたいのですが。例、JPGファイルを画面に表示します。
3 に答える
SurfaceFlinger はウィンドウを描画するものではありません。ウィンドウにフレーム バッファを割り当てます。アプリケーションで実行されているフレームワークは、SurfaceFlinger と対話せずに直接描画します。ウィンドウを描画するときに SurfaceFlinger が関与する唯一の操作は、フレームの描画が完了したら、最終的な新しいフレーム バッファーを画面に合成することです。
はい、SurfaceFlinger は Android のコンポジターであるため、表示されるすべてのものを取得し、結果のフレームがどのように見えるかを判断し、グラフィック カードの EGL インターフェースを介して画面に表示するために送信します。
Android 開発者の Jeff Sharkey によるナイトモードの画面全体の色合いの投稿で、目にするすべての結果を制御しているという考えを得ることができます。また、このトピックに適したビーマー プレゼンテーションも見つけました。
http://pierrchen.blogspot.jp/2014/02/what-is-surfaceflinger-in-android.html
SurfaceFlinger は Android システム サービスであり、すべてのアプリケーションとシステム サーフェスを単一のバッファに合成し、最終的にディスプレイ コントローラによって表示されます。
上記のステートメントを拡大してみましょう。
SurfaceFlinger はシステム全体のサービスですが、センサーや他のサービスのようにアプリケーション開発者が直接利用することはできません。UI を更新するたびに、SurfaceFlinger が起動します。これが、SurfaceFlinger がバッテリーを消耗する理由を説明しています。
アプリケーション サーフェスのほかに、ステータス バー、ナビゲーション バー、および回転が発生すると回転アニメーション用にシステムによって作成されるサーフェスなどのシステム サーフェスがあります。ほとんどのアプリケーションにはアクティブなサーフェスが 1 つだけあります。現在のフォアグラウンド アクティビティの 1 つですが、ビュー階層で SurfaceView が使用されている場合やプレゼンテーション モードが使用されている場合は、複数のアプリケーションがあります。
SurfaceFlinger は、これらすべてのサーフェスの合成を担当します。よくある誤解は、SurfaceFinger が DRAWING 用であるというものです。それは正しくありません。描画は OpenGL の仕事です。興味深いことに、SurfaceFlinger は合成にも openGL を使用していました。
コンポジションの結果は、ディスプレイ コントローラーがデータをフェッチするためのソースであるシステム バッファーまたはネイティブ ウィンドウに配置されます。これが画面に表示されるものです。