2011.12.28
【Android SDK】onSurfaceCreatedの再呼び出し
アプリを作っていて予想外の問題が起きたので書いておく。
状況
Activityが切り替わり、復帰したタイミングにonSurfaceCreatedが呼ばれる。
onSurfaceCreatedはGLSurfaceViewが作られたときに呼び出されるんじゃないのでしょうか?
いろんな感じでチェックしてみたけど機種ごとにも動きが違うっぽい。
IS03だと確実にActivity切り替え時に呼ばれる。
Galaxy S2だとメモリ使用量が増えてくると呼ばれるっぽい。
GLSurfaceViewの仕様
GLSurfaceViewの仕様はこんな感じらしい。
Link:GLSurfaceView.Renderer - Androidon
以下抜粋。
EGLレンダリングコンテキストが失われる場合があります.これは通常、デバイスがスリープ状態から復帰したときに起こります.EGLコンテキストが失われたとき、全てのopenGLソース(例えばテクスチャとか)は自動的に削除対象になります. レンダリングを正常に保つためにレンダラーはまだ必要とされているが足りなくなってしまっているリソースを再構築していかなければなりません.そういった場面でonSurfaceCreated(GL10, EGLConfig)は利用できます.
こういうことらしいので、Activityの切り替え時に消える可能性があるのを覚悟しながら処理を行わないといけないらしい。
仕様とはいえ、せっかくOpenGL側に転送しておいたものを削除されてしまうのはなかなかきびしい。
3Dとかだと頂点データもその対象になるのでさらに痛い。
何かしらうまい対処方法はないだろうか・・・
Open GL ES 2.0 プログラミングガイド Aaftab Munshi Dan Ginsburg Dave Shreiner アフタブ・ムンシ ダン・ギンズバーグ デーブ・シュライナー 松田 晃一 ピアソン桐原 2009-11-01 |
関連記事