1

ハンドラーを使用して 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スレッドに正しくアクセスするには何を変更すればよいですか? 前もって感謝します!

4

2 に答える 2