2013年10月21日月曜日

スタックしたactivityにtextureviewをぶっこんだら怒られた

発生:Android 4.0
surportpackage利用してません

Activity1stからActivity2ndを呼んで、Activity2ndでTextureViewを入れてBackKey押下という流れです。


setContentView(R.layout.second_layout);
LinearLayout ll = (LinearLayout) findViewById(R.id.second_ll);
ll.addView(new MyRotateTextureView(this));

backkeyで2ndを終了したときに、logcatにuncaought exeptionとして出る。
で、errorとして赤字で出る。
call to OpenGL ES API with no current context (logged once per thread)

前後関係のないコンテキストで呼んでねはーと

ということらしい。

webで調べると、OpenGL ESのメソッドは専用のスレッドあるからそこで操作してねということらしい。
いやー、なのでpostしてるんですが。。。

というわけでエラーを再現するために最小と思われるプロジェクトをそそくさと作成。
TextureViewのコンストラクタに使う引数は、Activityならthis、FragmentならgetActivity()。

Activityが1枚。再現せず。
Fragmentをバックスタックに積んで、ForegroundのFragmentでやってみる。再現せず。
Activityがスタックされてる状態でForegroundのActivityに対してTextureViewを入れると再現した。

Fragment上でやってればこのエラーは回避できそうだ。
どういうのが根本的な原因なんだろうなー。
掴むルーパーが違うのかな?2ndのonCreateのあとに1stのonSavedInstanceStateが来るし。

0 件のコメント:

コメントを投稿