android开发中实现线程通信有几种方法?android实现线程间通信的四种常见方式!
2021-08-20 14:52:13
浏览数 (2387)
在开发中我们要实现程序使用,那么对于线程通信肯定不会不了解的,那么下面和大家分享有关于“android开发中实现线程通信有几种方法?”这个问题的相关解决方法和实现方法!
1,通过Handler机制
主线程中定义Handler,子线程发消息,通知Handler完成UI更新,Handler对象必须定义在主线程中,如果是多个类直接互相调用,就不是很方便,需要传递content对象或通过接口调用。 另外Handler机制与Activity生命周期不一致的原因,容易导致内存泄漏,不推荐使用。
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机制"; 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,强烈推荐使用。
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()); } }
在线程通信的使用我们在这篇文章中就可以了解到了,对于“android开发中实现线程通信有几种方法?”这个问题的话我们也有了不少的了解,更多有关于android的使用和相关内容我们都可以在W3Cschool中进行学习和了解!