Android只允许UI线程修改Activity里的UI组件。当Android程序第一次启动时,Android会同时启动一条主线程(Main Thread),主线程主要负责处理与UI相关的事件,如用户的按键事件、屏幕绘图事件,并把相关的事件分发到对应的组件进行处理。所以,主线程通常又被称为UI线程。 

Android只允许UI线程修改Activity里的UI组件,这样会导致新启动的线程无法动态改变界面组件的属性值。但在实际的Android程序开发中,尤其是涉及动画的游戏开发中,需要让新启动的线程周期性的改变界面组件的属性值,这就需要借助于Handler的消息传递机制来实现了。 

1 Handler类简介 
Handler类的主要作用有两个: 
(1)在新启动的线程中发送消息 
sendMessage(Message msg)  或者 
sendEmptyMessage(int what)   
两者的差异,请看Android源码: 

public final boolean sendMessage(Message msg) { return sendMessageDelayed(msg, 0); } public final boolean sendEmptyMessage(int what){ return sendEmptyMessageDelayed(what, 0); } 

再看sendEmptyMessageDelayed(what, 0)的源码: 

public final boolean sendEmptyMessageDelayed(int what, long delayMillis) { Message msg = Message.obtain();msg.what = what; return sendMessageDelayed(msg, delayMillis); }

 其实,sendMessage(Message msg)  和sendEmptyMessage(int what)  实际上是一样的,一个传Message类型的msg,一个传int类型的what,传what的,最终会转为msg。 

(2)在主线程中获取、处理消息
 public void handleMessage(Message msg) 

2 使用实例 
下面使用Handler以及Timer类实现时间的自动刷新

public class MainActivity extends Activity {  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final TextView txt=(TextView)findViewById(R.id.showTime); final Handler myHandler=new Handler() {  @Override  public void handleMessage(Message msg)  {  if(msg.what==0x12)  {   txt.setText("当前时间:"+new java.util.Date());  }  } }; Button btn=(Button)findViewById(R.id.btn); btn.setOnClickListener(new OnClickListener() {  @Override  public void onClick(View arg0) {  // TODO Auto-generated method stub  new Timer().schedule(new TimerTask() {  @Override   public void run() {   // TODO Auto-generated method stub   myHandler.sendEmptyMessage(0x12);   }  }, 0,1000);    } }); }  @Override public 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; } } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多相关文章

  1. 关于Android中四类核心组件的简介
  2. Android子线程在没有ViewRoot的情况下能刷新UI吗?
  3. Android之在子线程更新UI(超详细)
  4. 解开Android应用程序组件Activity的"singleTask"之谜(1)
  5. Android 线程间通信机制(ITC详解)
  6. android中使用线程池和临时缓存优化网络图片加载
  7. android的UI操作单线程模型理解

随机推荐

  1. android中判断网络是否连接
  2. Android(安卓)文件操作大全
  3. 2013.04.10——— android BitmapFactory
  4. Android操作数据的动态更新ListView
  5. Android中检测网络连接状况的方法
  6. android run/debug configurations时报错
  7. 2011.08.26——— android ListView之多
  8. Android中话bitmap的简单示例
  9. Android(安卓)判断SD卡是否存在及容量查
  10. Android(安卓)源码编译make的错误处理