android線程間通信方式 Android線程通信



文章插圖
android線程間通信方式 Android線程通信

文章插圖
1,通過Handler機制.主線程中定義Handler,子線程發消息,通知Handler完成UI更新,Handler對象必須定義在主線程中,如果是多個類直接互相調用,就不是很方便,需要傳遞content對象或通過接口調用 。
private void one() {handler=new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what){case 123:tv.setText(""+msg.obj);break;}}};new Thread(){@Overridepublic 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方法
用Activity對象的runOnUiThread方法更新,在子線程中通過runOnUiThread()方法更新UI,強烈推薦使用 。
private void two(){new Thread(){@Overridepublic void run() {super.run();for (int i=0;i<3;i++){try {sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}runOnUiThread(new Runnable() {@Overridepublic void run() {tv.setText("通過runOnUiThread方法");}});}}.run();}3,View.post(Runnable r)
這種方法更簡單,但需要傳遞要更新的View過去,推薦使用
private void three(){new Thread(){@Overridepublic void run() {super.run();for (int i=0;i<3;i++){try {sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}tv.post(new Runnable() {@Overridepublic void run() {tv.setText("通過View.post(Runnable r) 方法");}});}}.run();}4,AsyncTask
【android線程間通信方式 Android線程通信】private 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());}}