Android Handler消息传递机制_安卓开发handler的使用
程序员文章站
2021-11-28 11:21:02
...
Android只允许UI线程修改Activity里的UI组件、当Android程序第一次启动时、Android会同时启动一条主线程(Main Thread)、主线程主要负责处理与UI相关的事件、如用户的按键事件、屏幕绘图事件、并把相关的事件分发到对应的组件进行处理、所以、 主线程通常又被称为UI线程
Android只允许UI线程修改Activity里的UI组件、这样会导致新启动的线程无法动态改变界面组件的属性值、但在实际的Android程序开发中、尤其是涉及动画的游戏开发中、需要让新启动的线程周期性的改变界面组件的属性值、这就需要借助于 Handler的消息传递机制 来实现了
一、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)
二、使用实例
下面使用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; } }
以上就是Handler类在新启动的线程中发送消息、以及在主线程中获取、处理消息的方法
推荐阅读
-
Android Studio 之 Android消息机制 之简单Demo --- 使用Handler和Message类来完成消息传递
-
Android中的消息机制:Handler消息传递机制
-
Android中Handler消息传递机制应用之子线程不允许操作主线程的组件
-
Handler消息机制的一些原理(直接用code讲解)——Android开发
-
Android的线程通信:消息机制原理(Message,Handler,MessageQueue,Looper),异步任务AsyncTask,使用JSON
-
Android开发学习笔记——Android的Handler消息机制
-
安卓开发中的handler机制
-
Android中Handler消息传递机制应用之子线程不允许操作主线程的组件
-
Handler消息机制的一些原理(直接用code讲解)——Android开发
-
安卓/android一个倒计时时钟,创建子线实现计时功能,使用异步消息机制将计时结果显示在界面上,使用Handle的sendMessage传送给子线程,然后在handlemessage实现