Android入门:Handler
Android入门:Handler
一、Handler介绍
在一个线程中存在一个消息队列,当消息队列中存在消息时,Handler就会处理这些消息;我们考虑一下这种场景:
我们要执行一个耗时很长的业务,执行完后要返回一个结果显示在TextView上,我们在主线程中执行这种业务是否合理呢?
显然是不合理的,因此我们会想到把业务放到子线程中执行,但是Android有个规定:所有更新UI的操作全要在主线程中完成,因此我们要做的就是把子线程执行完的结果传到主线程中并显示,这就需要Handler的帮忙;
比如ProgressBar、TextView的使用都会用到Handler;
当应用5秒内没有响应用户的输入,则会抛出以下错误:
Handler的原理如下:
模板代码:
- package org.xiazdong.handler;
- public class SampleActivity extends Activity {
- private Button button;
- private Handler handler = new Handler(){
- @Override
- public void handleMessage(Message msg) {
- if(msg.what == 1){
- //更新UI
- }
- if(msg.what == 2){
- //更新UI
- }
- }
- };
- private OnClickListener listener = new OnClickListener() {
- class ServiceThread extends Thread{
- private ServiceListener serviceListener = new ServiceListener() {
- @Override
- public void onService(int current) {//服务监听器
- //一边执行,一边发送消息给主线程
- handler.sendMessage(msg);
- }
- };
- @Override
- public void run() {
- //执行业务
- }
- }
- @Override
- public void onClick(View v) {
- ServiceThread thread = new ServiceThread(); //子线程执行业务
- thread.start();
- }
- };
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- button = (Button)this.findViewById(R.id.button);
- button.setOnClickListener(listener);
- }
- }
|
评论暂时关闭