Handler基本概念:
Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。
使用一个自己项目的代码来介绍一下Handler。
private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: SaleUtil.showToast(context, R.string.tip_bind_succ, 1000); // 存储当前绑定的账户 userInfo.setVerifyFlag(1); UserInfoDao.addUser(context, userInfo); break; case 1: SaleUtil.showToast(context, R.string.tip_bind_fail, 1000); UserInfoDao.addUser(context, userInfo); break; case 2: SaleUtil.showToast(context, R.string.tip_common_error, 1000); break; } } };
然后在点击事件中添加相应的代码:(这是一个用于登陆验证的代码,点击登陆时先弹出一个进度条,同时进行登陆验证,验证后弹出一个Toast)
public void onClick(View v) { final String userPhone = userPhoneEditText.getText().toString().trim(); final String userPwd = userPwdEditText.getText().toString().trim(); // 手机号码或登录密码为空时给出提示 if ("".equals(userPhone) || "".equals(userPwd)) SaleUtil.showToast(context, context.getResources().getString(R.string.tip_empty_account), 1000); else { userInfo = new UserInfo(); userInfo.setUserPhone(userPhone); userInfo.setUserPwd(userPwd); userInfo.setVerifyFlag(0); // 验证过程中给出进度提示 progressDialog = ProgressDialog.show(context, null, getResources().getText(R.string.tip_binding), true, true); new Thread() { @Override public void run() { // 异步调用webservice接口验证账号的有效性 String verifyResult = DataRequestUtil.verifyUser(context, userPhone, userPwd); if (null == verifyResult) handler.sendEmptyMessage(2); else handler.sendEmptyMessage(Integer.parseInt(verifyResult)); } }.start(); } dialog.dismiss(); }