tft每日頭條

 > 生活

 > android線程間通信有哪些方式

android線程間通信有哪些方式

生活 更新时间:2024-08-09 02:14:56

android線程間通信有哪些方式?用Activity對象的runOnUiThread方法更新,在子線程中通過runOnUiThread()方法更新UI,強烈推薦使用,今天小編就來聊一聊關于android線程間通信有哪些方式?接下來我們就一起去研究一下吧!

android線程間通信有哪些方式(android進程間通信方式講解)1

android線程間通信有哪些方式

1,通過Handler機制.主線程中定義Handler,子線程發消息,通知Handler完成UI更新,Handler對象必須定義在主線程中,如果是多個類直接互相調用,就不是很方便,需要傳遞content對象或通過接口調用。

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方法

用Activity對象的runOnUiThread方法更新,在子線程中通過runOnUiThread()方法更新UI,強烈推薦使用。

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

3,View.post(Runnable r)

這種方法更簡單,但需要傳遞要更新的View過去,推薦使用

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

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

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved