android线程间通信的四种实现方式

来源:互联网 发布:手机淘宝后台操作流程 编辑:程序博客网 时间:2024/05/23 05:07

1,通过Handler机制.

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();    }
主线程中定义Handler,子线程发消息,通知Handler完成UI更新,Handler对象必须定义在主线程中,如果是多个类直接互相调用,就不是很方便,需要传递content对象或通过接口调用。另外Handler机制与Activity生命周期不一致的原因,容易导致内存泄漏,不推荐使用。

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());        }    }



阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 煎馍片 煎馍 煎鱼做法 煎鱼的做法 煎龙利鱼 香煎龙利鱼 煎黄花鱼 香煎鱼柳 煎鱼块 香煎黄花鱼 煎鲳鱼 香煎鱼 煎鱼柳 煎龙利鱼做法 煎鱼籽 怎么煎鱼 煎鱼技巧 干煎黄花鱼 香煎翘嘴鱼 香煎鲳鱼 怎么煎鱼不掉皮 家常煎鱼 香煎马头鱼 如何煎鱼 怎样煎鱼不掉皮 香煎金丝鱼 香煎太阳鱼 香煎明太鱼 干煎鲳鱼 香煎鹦哥鱼 香煎金鲳鱼 香煎小鲳鱼 家常煎鱼的做法 煎扒鱼的做法 鱼要怎么煎才好吃 煎鱼的做法大全家常 怎样煎鱼好吃 整条煎鱼的做法 香煎巴沙鱼的做法 煎干明太鱼 煎雪鱼的做法