android通讯机制

来源:互联网 发布:ipad手写板软件 编辑:程序博客网 时间:2024/06/05 05:46

    java里线程间通讯用SOCKET,输入输出流,那么android用什么通讯呢?答案是主要是Handler

 1、 Handler的主要功能是发送消息,处理消息;实例化后,系统默认是在当前线程处理消息。当然,我们也可以人          为的设置在哪里处理消息;myLooper表示在当前线程处理消息,将它作为参数传入即可

 2、而接收消息的工作则是由MessageQueue简称MQ,MQ的特点是先进先出;而现在的MQ则是封装在Looper里                面。因此,只要我们在一个普通线程里加上两行代码就可以将它变成可以循环工作的线程。代码如下:

            new Thread(new Runnable(){
                public void run(){

                     Looper.prepare();   //初始化消息队列

                     Looper.loop();        //循环监听队列

                 }

           }).start();


3. 一个完整的通讯过程是:首先由Handler.SendMessage(Message msg),由MQ接收消息。MQ里一直监听的looper收     到消息后立即将该消息推送给Handler,再由Handler调用HandleMessage方法进行处理。如果有多条消息则需要       加以识别。

      

public class TransportActivity extends AppCompatActivity {    public TextView mTextView;    private Handler mhandler;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_transport_layout);        mTextView= (TextView) findViewById(R.id.tansport_txt);        // TODO: 2016/6/13 主线程里处理消息        mhandler=new Handler(){            public void handleMessage(Message msg) {                int type = msg.arg1;                // TODO: 2016/6/13 标识识别                switch (type){                    case 0:                        Intent intent = new Intent(TransportActivity.this, MainLayoutActivity.class);                        startActivity(intent);                        finish();                        break;                    case 1:                        String count = (String) msg.obj;                        mTextView.setText(count);                        break;                }            }        };        // TODO: 2016/6/13 在子线程里发送消息        Message message = Message.obtain();        message.arg1=0;    // TODO: 2016/6/13 标识1        mhandler.sendMessageDelayed(message,4000);        new Thread(new Runnable() {            int i;            @Override            public void run() {                for(i=4;i>0;i--){                    Message message = Message.obtain();                    message.arg1=1;        // TODO: 2016/6/13 标识2                    message.obj=i+"";                    mhandler.sendMessage(message);                    SystemClock.sleep(1000);                }            }        }).start();    }}

1 0
原创粉丝点击