文章插图
文章插图
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());}}
- android 布局适配 androidstudio网格布局
- 女人喝绿茶的最佳时间
- 中药一天喝两次的时间
- 男女之间什么算是暧昧 两人有暧昧的表现
- 春运火车票今起开售 春节期间火车票
- 这些双手间的小动作可以缓解疲劳
- 这些事做对时间养生效果才能加倍
- 地漏一旦安装好了还能换吗
- 地漏芯可以卸掉吗
- 装修的地漏如何选