なので予想です。表現が違っている箇所があるかもしれません。
例えばGLにtextureの作成を依頼するところとか。
肝はsurfaceを通じてnativeのGLの描画と関連付けすることです。
関連付けたsurfaceさえあればGLの描画スレッドとやりとりできるということです。
surfaceがHandlerみたいな感じですね。
Listenerは通知です。
AvailableはTextureViewが持つsurfaceをGLに関連付けするフェーズです。
UpdatedはGLからのsurfaceの受け取り完了通知を表しています。
DestroyedはGLに対して関連付けしたsurfaceの破棄を依頼することを表しています。
start
TextureViewがaddViewされる
↓
変更:getHardwareLayerが呼ばれて
↓
TexureViewにSurfaceTextureListenerしたmListenerが呼ばれる
↓
mListenerのonSurfaceTextureAvailableが呼ばれる
↓
mListenerのonSurfaceTextureAvailableでsurfaceが用意されている
↓
追加:Runnableに入る前にメンバーとしてGLインスタンスもっとかないと色々マズイ
↓
surfaceのtextureを作るRunnable()を実行する。引数にsurfaceが必要。
↓
RunnableでopenGLESの初期化と設定を行う。
↓
surfaceをGLとバインドする。超大事。
↓
初期化と設定が終わったらGLにsurfaceに描画するtextureの作成を依頼する
↓
GL側でtextureができたらmListenerのonSurfaceTextureUpdatedが呼ばれる
↓
textureがsurfaceに表示される
end
start
AcitivtyなりFragmentなり自身がisFinishing = trueなり、isRemoving = trueになり、detachedなり。
↓
TextureViewのonDettachedWindow
↓
onDettachedWindow内でmListenerのonSurfaceTextureDestroyedが呼ばれる。
↓
surfaceをクライアントか「システム※1」かどちらが破棄するかのフラグをリターンする
※1.trueならonSurfaceTextureDestroyedが終わった後にonDettachedWindowでreleaseされる
↓
追加:メンバーとしてGLインスタンスもっていれば、ここで破棄をGLに依頼できる※2
※2.onDettachedWindowに戻る前に破棄ができる。
onDettachedWindowでmListenerとのバインドが解除される
↓
onDettachedWindowが終了。surface及びmListenerとの関連付けが全てなくなる。
end