Handler的用法
来源:互联网 发布:java开发培训学费 编辑:程序博客网 时间:2024/05/16 14:40
因为要在非主线程中去更新UI线程的UI,所以在非主线程中发送Handler,通过Handler来更新UI
import java.util.Timer;import java.util.TimerTask;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import com.example.android_lb_handler.R;/***** 让一个文本的值递增* **/public class MainActivity extends Activity { TextView text; Button btn_start; int count; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = (TextView) findViewById(R.id.text1); btn_start = (Button) findViewById(R.id.btn_start); //点击按钮就会执行一个定时器 btn_start.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { new Timer().schedule(new TimerTask() { @Override public void run() { //创建消息对象 Message msg = new Message(); msg.obj="任意类型的数据"; msg.what=0; //发送到Handler handler.sendMessage(msg); } }, 0, 1000); } }); } Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { //首先要判断msg.what的值是由哪个线程发过来的 if (msg.what == 0) { // String data=(String) msg.obj; 这段代码可以得到msb.obj对象 //改变UI text.setText(count + ""); count++; } }; }; public void like(View v) { Intent i = new Intent(MainActivity.this, LikeActivity.class); startActivity(i); }}
Handler 的常用方法
l handleMessage(Message msg) :处理消息的方法。该方法通常用于被重写。
l hasMessages(int what) :检查消息队列中是否包含 what属性为指定值的消息
l hasMessages(int what, Object object) :检查消息队列中是否包含 what属性为指定值且 object属性为指定对象的消息
l 多个重载的 obtainMessage():获取消息
l sendEmptyMessage(int what):发送空消息
l sendEmptyMessageDelayed(int what, long delayMillis) :指定多少毫秒之后发送空消息
l sendMessage(Message msg) :立即发送消息
l sendMessageDelayed(Message msg, long delayMillis):
Message的定义
对于Handler来说可以传递一些内容,通过 Bundle对象可以封装 String、 Integer以及 Blob二进制对象,我们通过在线程中使用 Handler对象的 sendEmptyMessage或 sendMessage方法来传递一个 Bundle对象到 Handler处理器。对于 Handler类提供了重写方法 handleMessage(Message msg) 来判断,通过 msg.what来区分每条信息。将 Bundle解包来实现 Handler类更新 UI线程中的内容实现控件的刷新操作。
Message的四个参数说明
通过obtain(Handler h, int what, int arg1, int arg2, Object obj)来获取Message
其中:
l what 用户自定义的消息代码,这样接受者可以了解这个消息的信息。每个 handler各自包含自己的消息代码,所以不用担心自定义的消息跟其他 handlers有冲突
l arg1 arg2 整数类型,是setData的低成本替代品。传递简单类型
l obj
0 0
- Handler的用法
- Handler的用法
- Handler的用法2
- Handler的用法
- Android Handler的用法
- android Handler的用法
- Handler的用法
- Handler的用法
- handler的具体用法
- Handler的用法
- Handler的用法总结
- Handler的用法
- Handler的用法
- HandLer的用法
- Handler的用法
- Handler的一些用法
- Handler的常见用法
- Handler的用法
- Prototype
- meta的使用小结
- IOS项目中使用CocoaPods管理依赖库
- WinForm窗体传值
- linux中 sh 与 ./ filename 命令
- Handler的用法
- Axis2 WebService的发布和调用说明
- 【数据结构】双向链表
- 学生信息管理系统(C语言版)
- C语言程序设计经典书籍
- php调用C代码的方法详解
- Android开发中立即停止AsyncTask和Thread的一些办法
- iOS9 适配教程
- 【C语言】关于宏定义中#和##符号的使用和宏定义展开问题