大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > Android技巧 > Android多线程编程之异步消息处理机制之Handler详解

Android多线程编程之异步消息处理机制之Handler详解(1)

关键词:多线程Handler异步消息Android  阅读(3365) 赞(19)

[摘要]本文是对Android多线程----异步消息处理机制之Handler详解的讲解,对学习Android编程技术有所帮助,与大家分享。

关于Android的多线程知识,请参考本人之前的一篇博客:Android 多线程----AsyncTask异步任务详解

在Android当中,提供了异步消息处理机制的两种方式来解决线程之间的通信问题,一种是今天要讲的Handler的机制,还有一种就是之前讲过的 AsyncTask 机制。

一、handler的引入:

我们都知道,Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃。相信大家在日常的工作当中都会经常遇到这个问题,解决的方案应该也是早已烂熟于心,即创建一个Message对象,然后借助Handler发送出去,之后在Handler的handleMessage()方法中获得刚才发送的Message对象,然后在这里进行UI操作就不会再出现崩溃了。具体实现代码如下:

 package com.example.androidthreadtest;
 
 import android.app.Activity;
 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;
 
 public class MainActivity extends Activity implements OnClickListener {
 
     public static final int UPDATE_TEXT = 1;
     private TextView text;
     private Button changeText;
     private Handler handler = new Handler() {
         public void handleMessage(Message msg) {
             switch (msg.what) {
             case UPDATE_TEXT:
                 text.setText("Nice to meet you");
                 break;
             default:
                 break;
             }
         }
     };
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         text = (TextView) findViewById(R.id.text);
         changeText = (Button) findViewById(R.id.change_text);
         changeText.setOnClickListener(this);
     }
 
     @Override
     public void onClick(View v) {
         switch (v.getId()) {
         case R.id.change_text:
             new Thread(new Runnable() {
                 @Override
                 public void run() {
                     Message message = new Message();
                     message.what = UPDATE_TEXT;
                     handler.sendMessage(message);
                 }
             }).start();
             break;
         default:
             break;
         }
     }
 }
«上一页1234...8下一页»


相关评论