android實(shí)現(xiàn)線程間通信的四種常見方式
主線程中定義Handler,子線程發(fā)消息,通知Handler完成UI更新,Handler對(duì)象必須定義在主線程中,如果是多個(gè)類直接互相調(diào)用,就不是很方便,需要傳遞content對(duì)象或通過接口調(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對(duì)象的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(); }
這種方法更簡(jiǎn)單,但需要傳遞要更新的View過去,推薦使用
4,AsyncTaskprivate void four(){new MyAsyncTask().execute('通過AsyncTask方法'); }private class MyAsyncTask extends AsyncTask{@Overrideprotected Object doInBackground(Object[] objects) { for (int i=0;i<3;i++){try { sleep(1000);} catch (InterruptedException e) { e.printStackTrace();} } return objects[0].toString();}@Overrideprotected void onPostExecute(Object o) { super.onPostExecute(o); tv.setText(o.toString());} }
到此這篇關(guān)于android實(shí)現(xiàn)線程間通信的四種常見方式的文章就介紹到這了,更多相關(guān)android 線程間通信內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. 使用Python webdriver圖書館搶座自動(dòng)預(yù)約的正確方法2. Linux刪除系統(tǒng)自帶版本Python過程詳解3. PHP如何開啟Opcache功能提升程序處理效率4. Python3 json模塊之編碼解碼方法講解5. 在線php代碼縮進(jìn)、代碼美化工具:PHP Formatter6. Android 簡(jiǎn)單的實(shí)現(xiàn)滑塊拼圖驗(yàn)證碼功能7. Python 合并拼接字符串的方法8. ASP.NET MVC使用jQuery ui的progressbar實(shí)現(xiàn)進(jìn)度條9. Android Studio實(shí)現(xiàn)格式化XML代碼順序10. 淺談?dòng)蓀osition屬性引申的css進(jìn)階討論

網(wǎng)公網(wǎng)安備