android實(shí)現(xiàn)線程間通信的四種常見方式
1,通過Handler機(jī)制
主線程中定義Handler,子線程發(fā)消息,通知Handler完成UI更新,Handler對象必須定義在主線程中,如果是多個(gè)類直接互相調(diào)用,就不是很方便,需要傳遞content對象或通過接口調(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="通過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("通過runOnUiThread方法"); } }); } }.run(); }
用Activity對象的runOnUiThread方法更新,在子線程中通過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("通過View.post(Runnable r) 方法"); } }); } }.run(); }
這種方法更簡單,但需要傳遞要更新的View過去,推薦使用
4,AsyncTask
private void four(){ new MyAsyncTask().execute("通過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()); } }
到此這篇關(guān)于android實(shí)現(xiàn)線程間通信的四種常見方式的文章就介紹到這了,更多相關(guān)android 線程間通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
android實(shí)現(xiàn)banner輪播圖無限輪播效果
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)banner輪播圖無限輪播效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10Android衛(wèi)星菜單效果的實(shí)現(xiàn)方法
這篇文章主要介紹了Android衛(wèi)星菜單效果的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-05-05Android學(xué)習(xí)小結(jié)之獲取被啟動的Activity傳回的數(shù)據(jù)
這篇文章主要介紹了獲取被啟動的Activity傳回的數(shù)據(jù),非常不錯,介紹的非常詳細(xì),需要的朋友可以參考下2016-08-08Activity配置、啟動和關(guān)閉activity實(shí)例詳解
這篇文章主要介紹了Activity配置、啟動和關(guān)閉activity實(shí)例詳解,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09Android自定義View實(shí)現(xiàn)時(shí)鐘效果
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)時(shí)鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01Android開發(fā)中避免應(yīng)用無響應(yīng)的方法(Application Not Responding、ANR)
這篇文章主要介紹了Android開發(fā)中避免應(yīng)用無響應(yīng)的方法,即避免彈出Application Not Responding(ANR)對話框,需要的朋友可以參考下2014-06-06Android實(shí)現(xiàn)熱門標(biāo)簽的流式布局
這篇文章主要介紹了Android實(shí)現(xiàn)熱門標(biāo)簽的流式布局的詳細(xì)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-12-12