问题描述
我现在有个可以自动播放的线程,第一次按开始,关闭都是没有问题的。但是关闭后再想打开,就死循环了。不知道为什么?booleanm_bthread_stop=false;Threadm_thread_auto_play=newThread(picture_view.this);Handlerm_handler=newHandler(){publicvoidhandleMessage(Messagemsg){if(msg.what==100){Log.v(TAG,"inHandler()");//第二次按start以后此处就没有打印出来ShowPictureAuto();//某个功能}super.handleMessage(msg);};start.clicklistener(){//开始按钮if(!m_thread_auto_play.isAlive()){try{m_bthread_stop=false;m_thread_auto_play.start();}catch(Exceptione){m_bthread_stop=false;m_thread_auto_play.run();}}}stop.clicklistener(){//停止按钮if(m_thread_auto_play.isAlive()){m_bthread_stop=true;m_thread_auto_play.suspend();}}@Overridepublicvoidrun(){//TODOAuto-generatedmethodstubLog.v(TAG,"Jayinm_auto_play.run");while(!m_bthread_stop){Log.v(TAG,"Jayinm_auto_play.runm_bthread_stop=false");//死循环时这条trace可以打印出来try{Messagem=newMessage();m.what=100;picture_view.this.m_handler.sendMessage(m);Thread.sleep(2000);}catch(Exceptione){Log.v(TAG,"Jayinm_auto_play.runcatchexception");e.printStackTrace();}}}
解决方案
解决方案二:
我后来又看了一下,发现原因是第二次启动线程的时候,所发的消息我的handler压根就没有收到。请问有谁知道这是为什么么?(第一次启动线程的时候是可以收到的,奇怪!)
解决方案三:
你的线程用suspend()挂起,再开时要用resume()继续线程