When I use send message from a jni thread to this thread (ZWANJniThread) by "Input" method, At beginning, it works, but when I create a new ZWANJniThread thread, sometimes, I get "W/Looper: Could not write wake signal, errno=89" in log.
Has any body experienced this Looper error or any hint to check this problem? thanks.
public class ZWANJniThread extends Thread
{
private static final String ZWANTAG = ZWANJniThread.class.getCanonicalName();
private Handler mMsgHandler = null;
VideoDeviceCallBack mVideoDeviceCallBack;
public void setmVideoDeviceCallBack(VideoDeviceCallBack mVideoDeviceCallBack) {
this.mVideoDeviceCallBack = mVideoDeviceCallBack;
}
public ZWANJniThread() {
Log.e(ZWANTAG, ">>>>>ZWANJniThread Constructor");
}
public int Input(int msgWhat, Object msgObj){
if(mMsgHandler == null)
{
Log.e(ZWANTAG, "mMsgHandler is NULL===========");
return 0;
}
Message msg = mMsgHandler.obtainMessage();
msg.what = msgWhat;
msg.obj = msgObj;
mMsgHandler.sendMessage(msg);
return 0;
}
@Override
public void run(){
Looper.prepare();
mMsgHandler = new Handler(){
@Override
public void handleMessage(Message msg){
Log.e("ZWANTAG", "handle Message---" + msg.what);
switch (msg.what)
{
case ZWANMessage.JniThreadMessage.VIDEODEVICE_Open:
{
T_ZWANCamerID tCamerId = (T_ZWANCamerID)msg.obj;
mVideoDeviceCallBack.Open(tCamerId.s32CamerID);
break;
}
case ZWANMessage.JniThreadMessage.VIDEODEVICE_Start:
{
T_ZWANVideoSwitchLevel tLevel= (T_ZWANVideoSwitchLevel) msg.obj;
mVideoDeviceCallBack.Start(null, tLevel.s32Width, tLevel.s32Height, tLevel.mLocalSurfaceHolder);
break;
}
case ZWANMessage.JniThreadMessage.VIDEODEVICE_Stop:
{
mVideoDeviceCallBack.Stop();
break;
}
case ZWANMessage.JniThreadMessage.VIDEODEVICE_Close:
{
mVideoDeviceCallBack.Close();
break;
}
default:
break;
}
}
};
Looper.loop();
}
}