SurfaceView特集 第1回

SurfaceView特集

 SurfaceViewとは、Androidが提供するコンポーネントの1つです。通常のViewとは違い、高速に描画することができます。通常のViewは、 一連の処理の中に描画処理が存在することです。言いかえると、描画処理を行ために、描画以外の一連の処理を行う必要があるのです。 これでは、描画に時間がかかりますね。

 一方、SurfaceViewはViewのように、一連の処理に描画処理があるのではなくて、独立した処理として存在します。描画処理を行うために、 他の処理を行う必要がないのです。だから高速に描画ができると言うことなのです。

利用場面について

 SurfaceViewは「どのような時な場面で利用すればよいか?」とか、気になりませんか。SurfaceViewを使うと、 描画の開始処理や終了処理を考慮しなければなりません。このことは処理上、複雑になることが間違いないと言い切れます。 実は、何回かSurfaceViewを使ってみたのですが、未だにシックリこないのです。

 さて、SurfaceViewを使う時は、どのような場面なのでしょうか?
その答えは、「アプリ全体的な処理速度を落とさずに、高速描画したい時に使おう」ですね。必要ない場面で 使っても、処理が難しくなるだけですから、なるべくは使いたくないですからね。

SurfaceViewのサイクルについて

 SurfaceViewを使う際、大事なのがインスタンスの生成と破棄です。SurfaceViewを継承して作成した独自のSurfaceViewを 作ってみたのですが、インスタンスの生成と破棄のタイミングがイマイチわからなくて、例外が発生しまくったものです。
左図はActivityのサイクルです。まずは、これで整理しましょう。
番号が同じイベントは対になるイベントです。画面表示より下の番号は、画面表示より上の番号の後処理を行います。 というか、そのように作ります。
右図はActivityのサイクルに、SurfaceViewのサイクルを重ねたものです。黄色部分がそうです。 画面表示の下にある「surfaceDestroyed」は、SurfaceViewが破棄される直前に呼ばれるものだと思っていましたが、 実はそうじゃなかったのです。

SurfaceViewは他のコンポーネントと同様に、ActivityのonDestroyが呼ばれるまでは破棄されないようです。なので、 ④で操作するのは、インスタンスの生成や破棄ではなくて、描画に使用するバッファの初期化や後処理を 操作するのです。
以上です。
メッセージを残す
名前: メッセージ:
Copyright © takamax All Rights Reserved