一、Handler的定义:

主要接受子 线程发送的数据, 并用此数据配合主线程更新 UI.

解释: 当应用程序启动时, Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI 控件, 进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。 如果此时需要一个耗时的操作,例如: 联网读取数据, 或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,,会收到Android系统的一个错误提示 "强制关闭". 这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,,Android主线程是线程不 安全的, 也就是说,更新UI只能在主线程中更新,子线程中操作是危险的. 这个时候,Handler就出现了.,来解决这个复杂的问题 , 由于Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主线程进行更新UI。

二、Handler一些特点

handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程),
它有两个作用: (1): 安排消息或Runnable 在某个主线程中某个地方执行, (2)安排一个动作在不同的线程中执行

Handler中分发消息的一些方法
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)

以上post类方法允许你排列一个Runnable对象到主线程队列中,

sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新.



以下是一个demo:

1.我们在MainActivity(主UI)线程中接受消息

public class MainActivity extends Activity {

public static MyHandler mHandler;

public void onCreate(Bundle savedInstanceState) {

mHandler = new MyHandler();


}


class MyHandler extends Handler {
public MyHandler() {
}

public MyHandler(Looper L) {
super(L);
}


@Override//接受消息
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
Log.d("MyHandler", "handleMessage......");
if (msg.getData().getString("UI") == "play")
{
Log.v("MyHandler", "play!!!!!!!!!!!!!!!!!");
if (mSurfaceHolder != null)
mSurfaceHolder.setFixedSize(720, 576);
}
super.handleMessage(msg);

}
}

}



这里我们在另一个线程中发送消息:

Message msg = new Message();
Bundle b = new Bundle();// 存放数据
b.putString("UI", "stop");
msg.setData(b);
MainActivity.mHandler.sendMessage(msg); // 向Handler发送消息,更新UI

更多相关文章

  1. 浅析Android中的消息机制-解决:Only the original thread that cr
  2. Android异步消息机制之Handler
  3. Android的Handler机制详解3_Looper.looper()不会卡死主线程
  4. Andorid Dialog 示例【慢慢更新】
  5. Android(安卓)SDK Manager无法更新的解决
  6. Android热更新框架Tinker无法更新?
  7. Android之Handler用法总结
  8. Android开发之消息处理机制(一)——Handler
  9. Android,一个思路实现APP版本更新

随机推荐

  1. 【源码实例】纯CSS水波纹效果和动画气泡
  2. 华为ie认证难不难
  3. 作为一名前端开发者,你有必要知道这些项目
  4. web开发中的长度单位(px,em,ex,rem),如何运
  5. 高中学历可以学习华为认证网络工程师吗?
  6. Docker安装及配置优化(3)
  7. 手把手教你从零开始用WordPress建站
  8. 解放双手,提高生产力,这款神器你值得拥有
  9. 这38款超级炫酷的时间轴特效代码案例,总有
  10. 冒泡排序函数