美文网首页
Android线程间通信

Android线程间通信

作者: 悠悠我心_4a00 | 来源:发表于2018-07-19 15:45 被阅读0次

1.安卓线程间通信的方式有以下几种

1)共享变量(内存)

多个线程共享同一份内存,就是说,一个变量可以同时被多个线程所访问。这里要特别注意同步和原子操作的问题。

2)管道

“管道”是java.io包的一部分。它是Java的特性,而不是Android特有的。一条“管道”为两个线程建立一个单向的通道。生产者负责写数据,消费者负责读取数据。

3)handle机制

一个线程对应一个Looper,一个Looper持有一个MessageQueue,一个Looper可以与多个Handler绑定,一个MessageQueue中可以包含多个Message。

面试被问到android中两个子线程怎通信

构造HandlerThread类的对象mHandlerThread,这样生成一个子线程可以调用new

MyHandler(mHandlerThread.getLooper())来获取子线程的handler,另一个子线程发消息,收到消息的就是子线程而不是主线程了。

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

用Activity对象的runOnUiThread方法更新,在子线程中通过runOnUiThread()方法更新UI,强烈推荐使用。

privatevoidtwo(){

newThread(){

@Override

publicvoidrun(){

super.run();

for(inti=0;i<3;i++){

try{

sleep(1000);

}catch(InterruptedException e) {

                        e.printStackTrace();

                    }

                }

runOnUiThread(newRunnable() {

@Override

publicvoidrun(){

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

        }

    }

相关文章

  • Android系统Java源码探索(5)—Binder通信机制

    一 前言 之前分析了Android系统线程间的通信机制(Handler),这篇看看Android系统进程间的通信—...

  • Android线程间通信

    android线程间通信的四种实现方式 通过Handler机制 子线程与子线程之间通信 unOnUiThread方...

  • Android 线程间通信

    一、前言 总的来说,Android的线程间通信主要有以下几种方式:1.系统自带(原生):Handler机制;Asy...

  • Android 线程间通信

    线程间通信方式 Handler 参考1 Activity.runOnUiThread(Runnable acti...

  • Android线程间通信

    1.安卓线程间通信的方式有以下几种 1)共享变量(内存) 多个线程共享同一份内存,就是说,一个变量可以同时被多个线...

  • Android 线程间通信

    Android系统为多线程提供的几种方案以及各自应用场景 1、异步任务 AsyncTaskAsyncTask是切换...

  • android线程间通信

    android线程间通信四种方式: 1,通过Handler机制 主线程中定义Handler,子线程发消息,通知Ha...

  • handler机制和流程简单理解

    handler机制,即Android的消息处理机制,主要用于Android线程间通信,主线程更新UI,发送消息,处...

  • Android线程通信流程源码分析

    Android的线程间通信核心元素 Handler Looper Message MessageQueue 1. ...

  • Android通信系列-线程间通信

    01 线程概述 线程的优先级 线程创建时,子线程继承父线程的优先级。线程创建后,可通过调用setPriority(...

网友评论

      本文标题:Android线程间通信

      本文链接:https://www.haomeiwen.com/subject/yeytmftx.html