设为首页 加入收藏

TOP

Android中的Handler详解以及和Thread的区别
2014-11-24 03:20:00 来源: 作者: 【 】 浏览:0
Tags:Android Handler 详解 以及 Thread 区别

一、Handler的定义:


主要接受子线程发送的数据, 并用此数据配合主线程更新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对象到队列中,等待更新.


三、Handler实例


(1) 子类需要继承Hendler类,并重写handleMessage(Message msg) 方法, 用于接受线程数据


以下为一个实例,它实现的功能为 : 通过线程修改界面Button的内容


public class MyHandlerActivity extends Activity {


Button button;


MyHandler myHandler;



protected void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);


setContentView(R.layout.handlertest);



button = (Button) findViewById(R.id.button);


myHandler = new MyHandler();


// 当创建一个新的Handler实例时, 它会绑定到当前线程和消息的队列中,开始分发数据


// Handler有两个作用, (1) : 定时执行Message和Runnalbe 对象


// (2): 让一个动作,在不同的线程中执行.



// 它安排消息,用以下方法


// post(Runnable)


// postAtTime(Runnable,long)


// postDelayed(Runnable,long)


// sendEmptyMessage(int)


// sendMessage(Message);


// sendMessageAtTime(Message,long)


// sendMessageDelayed(Message,long)



// 以上方法以 post开头的允许你处理Runnable对象


//sendMessage()允许你处理Message对象(Message里可以包含数据,)



MyThread m = new MyThread();


new Thread(m).start();


}



/**


* 接受消息,处理消息 ,此Handler会与当前主线程一块运行


* */



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......");


super.handleMessage(msg);


// 此处可以更新UI


Bundle b = msg.getData();


String color = b.getString("color");


MyHandlerActivity.this.button.append(color);



}


}



class MyThread implements Runnable {


public void run() {



try {


Thread.sleep(10000);


} catch (InterruptedException e) {


// TODO Auto-generated catch block


e.printStackTrace();


}



Log.d("thread.......", "mThread........");


Message msg = new Message();


Bundle b = new Bundle();// 存放数据


b.putString("color", "我的");


msg.setData(b);



MyHandlerActivity.this.myHandler.sendMessage(msg); // 向Handler发送消息,更新UI



}


}



}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux内存管理之高端内存 下一篇Android开发 打开系统设置信息页面

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C语言中如何将结构体 (2025-12-24 22:20:09)
·纯C语言结构体成员变 (2025-12-24 22:20:06)
·C语言中,指针函数和 (2025-12-24 22:20:03)
·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)