千家信息网

android开发中如何实现线程通信

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章主要介绍了android开发中如何实现线程通信,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1,通过Handler机制主线程中
千家信息网最后更新 2024年09月22日android开发中如何实现线程通信

这篇文章主要介绍了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开发中如何实现线程通信"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0