andorid handler 消息传递机制
来源:互联网 发布:web数据挖掘 编辑:程序博客网 时间:2024/06/08 08:25
当一个程序第一次启动时,Android会同时启动一条主线程(Main Thread),主线程主要负责处理与UI相关的事件,如用户的按键事件、用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理。所以主线程又被称为UI线程。
出于性能优化考虑,Android的UI操作不是线程安全的,这意味着如果有多个线程并发操作UI组件,可能导致线程安全问题。为了解决这个问题,Android制定了一个简单的原则:只允许UI线程修改Activity里的UI组件,试图启动一个新线程并刷新UI是不允许的。那么如何让新线程可以刷新UI呢?为了解决这个问题,Android引入了Handler来处理解决这个问题。
Handler类的主要作用有两个:
- 在新启动的线程中发送消息
- 在主线程中获取、处理消息
package com.qicaiz.handlertest;import android.app.Activity;import android.app.ProgressDialog;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity{TextView showTextView;Button addButton;MyHandler myHandler;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);showTextView = (TextView)findViewById(R.id.showTextView);addButton = (Button)findViewById(R.id.addButton); <span style="color:#FF0000;">//在主线程中加入myHandler,当收到消息时会回调handleMessage(Message msg)方法</span>myHandler = new MyHandler();addButton.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View arg0){// TODO Auto-generated method stuMyThread myThread = new MyThread();new Thread(myThread).start();}});} //定义一个新线程class MyThread implements Runnable{@Overridepublic void run(){// TODO Auto-generated method stubtry{Thread.sleep(10000);}catch(InterruptedException e){e.printStackTrace();}Message msg = new Message();Bundle bundle = new Bundle();bundle.putString("add", "更新UI");msg.setData(bundle);myHandler.sendMessage(msg); <span style="color:#FF0000;">//myHandler在新启动的线程中发送消息</span>}}<span style="color:#FF0000;">//定义MyHandler 继承Handler并重写handleMessage(Message msg)方法</span>class MyHandler extends Handler{ //必须重写的方法@Overridepublic void handleMessage(Message msg){// TODO Auto-generated method stubsuper.handleMessage(msg);Bundle bundle = msg.getData();String str = bundle.getString("add"); <span style="color:#FF0000;">//当收到消息时,刷新UI</span> showTextView.setText(str);}}@Overridepublic boolean onCreateOptionsMenu(Menu menu){// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
0 0
- andorid handler 消息传递机制
- Handler消息传递机制
- Handler 消息传递机制
- Handler消息传递机制
- Handler消息传递机制
- Handler 消息传递机制
- Handler消息传递机制
- Handler消息传递机制
- Handler消息传递机制
- Handler 消息传递机制
- Handler 消息传递机制
- Handler消息传递机制
- Handler消息传递机制
- Handler消息传递机制
- Handler消息传递机制
- Handler消息传递机制
- Handler消息传递机制
- Handler消息传递机制
- JavaWeb开发中3大必会知识总结(程序员必读)
- 与Server端进行Json数据的POST操作
- Android studio ——设置ide和project编码格式
- 智能监控系统开发日志
- 二级页表如何节省内存
- andorid handler 消息传递机制
- fragment小结
- 网站优化只之纯文本链接的作用-四川土豪工作室
- 智能监控系统开发
- POJ 1061青蛙的约会 ,扩展欧几里得算法
- SQL插入数据的几种方式
- gcc编译器完全优化指南
- Maximum Depth of Binary Tree
- LeetCode 071-Simplify Path