android - Why does this Thread freeze the UI -


in code have send message long togglebutton checked. prevent ui thread freezing, put action in seperate thread.

my problem is, still freezes, don't know why

this relevant code:

private togglebutton.onclicklistener lightmirroronclicklistener = new togglebutton.onclicklistener() {      @override     public void onclick(view v) {         if (lightmirrorbtn.ischecked()) {             lightthread = new lightthread();             lightthread.start();         } else if(!lightmirrorbtn.ischecked()) {             lightthread.interrupt();         }     }  };  class lightthread extends thread {      handler lighthandler = new handler();      runnable light = new runnable() {         public void run() {              while (lightmirrorbtn.ischecked()) {                 lighttxmsg.frameformat = constantlist.standard_frame;                 lighttxmsg.frametype = constantlist.data_frame;                 lighttxmsg.datalength = (byte) 8;                 lighttxmsg.messageid = 0x3c1;                 int[] messagearray = ambi_light;                 (int = 0; < lighttxmsg.datalength; i++) {                     lighttxmsg.data[i] = messagearray[i];                 }                  returncode = democontroller.transmitmessage(lighttxmsg,                         constantlist.binary_format);                 }         }     };      public void run() {         while (!isinterrupted()) {             try {                 thread.sleep(60);                 lighthandler.post(light);              } catch (interruptedexception e) {                 break;             }         }      }  } 

edit: solution problem:

private togglebutton.oncheckedchangelistener lightmirroronclicklistener = new togglebutton.oncheckedchangelistener() {      @override     public void oncheckedchanged(compoundbutton buttonview,             boolean ischecked) {         if (ischecked == true) {             new thread(new runnable() {                 public void run() {                     lighttxmsg.frameformat = constantlist.standard_frame;                     lighttxmsg.frametype = constantlist.data_frame;                     lighttxmsg.datalength = (byte) 8;                     lighttxmsg.messageid = 0x3c1;                     int[] messagearray = ambi_light_on;                     (int = 0; < lighttxmsg.datalength; i++) {                         lighttxmsg.data[i] = messagearray[i];                     }                      returncode = democontroller.transmitmessage(lighttxmsg,                             constantlist.binary_format);                 }             }).start();          }  else if (!ischecked) {             new thread(new runnable() {                 public void run() {                     lighttxmsg.frameformat = constantlist.standard_frame;                     lighttxmsg.frametype = constantlist.data_frame;                     lighttxmsg.datalength = (byte) 8;                     lighttxmsg.messageid = 0x3c1;                     int[] messagearray = ambi_light_off;                     (int = 0; < lighttxmsg.datalength; i++) {                         lighttxmsg.data[i] = messagearray[i];                     }                      returncode = democontroller.transmitmessage(lighttxmsg,                             constantlist.binary_format);                 }             }).start();         }     }  }; 

 handler lighthandler = new handler(); 

when create handler thread has not yet started. being created. so, according handler's default constructor documentation handler associated "with looper current thread" ... main(ui) thread. post messages on main thread.

you don't need handler post runnable on. can either:

  1. create thread , specify it's actions in run() method or
  2. pass runnable thread executed in thread using thread(runnable) constructor

here basic articles threads:

  1. processes , threads
  2. keeping app responsive
  3. specifying code run on thread

Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -