在開(kāi)發(fā)中我們要實(shí)現(xiàn)程序使用,那么對(duì)于線程通信肯定不會(huì)不了解的,那么下面和大家分享有關(guān)于“android開(kāi)發(fā)中實(shí)現(xiàn)線程通信有幾種方法?”這個(gè)問(wèn)題的相關(guān)解決方法和實(shí)現(xiàn)方法!
1,通過(guò)Handler機(jī)制
主線程中定義Handler,子線程發(fā)消息,通知Handler完成UI更新,Handler對(duì)象必須定義在主線程中,如果是多個(gè)類直接互相調(diào)用,就不是很方便,需要傳遞content對(duì)象或通過(guò)接口調(diào)用。 另外Handler機(jī)制與Activity生命周期不一致的原因,容易導(dǎo)致內(nèi)存泄漏,不推薦使用。
private void one() { handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case 123: tv.setText(""+msg.obj); break; } } }; new Thread(){ @Override public void run() { super.run(); for (int i=0;i<3;i++){ try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } Message message=new Message(); message.what=123; message.obj="通過(guò)Handler機(jī)制"; handler.sendMessage(message); } }.run(); }
2,runOnUiThread方法
private void two(){ new Thread(){ @Override public void run() { super.run(); for (int i=0;i<3;i++){ try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } runOnUiThread(new Runnable() { @Override public void run() { tv.setText("通過(guò)runOnUiThread方法"); } }); } }.run(); }
用Activity對(duì)象的runOnUiThread方法更新,在子線程中通過(guò)runOnUiThread()方法更新UI,強(qiáng)烈推薦使用。
3,View.post(Runnable r) 、
private void three(){ new Thread(){ @Override public void run() { super.run(); for (int i=0;i<3;i++){ try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } tv.post(new Runnable() { @Override public void run() { tv.setText("通過(guò)View.post(Runnable r) 方法"); } }); } }.run(); }
這種方法更簡(jiǎn)單,但需要傳遞要更新的View過(guò)去,推薦使用
4,AsyncTask
private void four(){ new MyAsyncTask().execute("通過(guò)AsyncTask方法"); } private class MyAsyncTask extends AsyncTask{ @Override protected Object doInBackground(Object[] objects) { for (int i=0;i<3;i++){ try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } return objects[0].toString(); } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); tv.setText(o.toString()); } }
在線程通信的使用我們?cè)谶@篇文章中就可以了解到了,對(duì)于“android開(kāi)發(fā)中實(shí)現(xiàn)線程通信有幾種方法?”這個(gè)問(wèn)題的話我們也有了不少的了解,更多有關(guān)于android的使用和相關(guān)內(nèi)容我們都可以在W3Cschool中進(jìn)行學(xué)習(xí)和了解!