ハンドラーを使用して GLThread から UI を更新しようとしています。「handleMessage」のすべてがUIスレッドで実行されることを読みましたが、それでもこの例外が発生します:
05-31 09:22:55.653: E/AndroidRuntime(26273): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
ここに私のハンドラがあります:
public class VideoPlayerCallback implements Handler.Callback {
public static final int PLAY = 0;
public static final int STOP = 1;
public boolean handleMessage(Message msg) {
if(msg.what == VideoPlayerCallback.PLAY) {
ARVideoTemplate videoTemp = (ARVideoTemplate) msg.obj;
String uriPath = "android.resource://" + getPackageName() +"/raw/"+videoTemp.getFileName();
updateVideo(uriPath); // UI Actions
return true;
}
else if(msg.what == VideoPlayerCallback.STOP){
updateVideo(null); // UI Actions
return true;
}
return false;
}
}
次に、このハンドラーを GLRenderer に配置するには、次のようにします。
Handler player = new Handler(new VideoPlayerCallback());
((ARGLSurfaceView) mGLSurfaceView).setVideoView(player);
そして GLRenderer からの呼び出し:
Message msg = Message.obtain(mVideoPlayer);
msg.obj = video;
msg.what = VideoPlayerCallback.PLAY;
this.mVideoPlayer.dispatchMessage(msg);
UIスレッドに正しくアクセスするには何を変更すればよいですか? 前もって感謝します!