zoukankan      html  css  js  c++  java
  • Android应用开发学习笔记之多线程与Handler消息处理机制

    作者:刘昊昱 

    博客:http://blog.csdn.net/liuhaoyutz

    和JAVA一样,Android下我们可以通过创建一个Thread对象实现多线程。Thread类有多个构造函数,一般通过构造函数Thread(Runnable runnable)实现多线程,代码如下:

    Thread thread = new Thread(new Runnable() {
             //重写Runnable的run()方法
             publicvoid run() {
                       //子线程操作实现
             }
    });
    thread.start();          // 启动线程thread执行


    使用标准的JAVA线程类Thread可以创建子线程,但是在Android下,用Thread创建的线程有一个问题就是Thread创建的子线程不能对UI界面进行任何操作。为此,Android引入了Handler消息处理机制,通过Handler在子线程和UI线程之间传递信息,达到更新UI界面的目的。

    下面看一个使用Handler处理消息的例子,其运行效果如下:

    先来看主布局文件,其内容如下:

     

    <?xml version="1.0"encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
     
       <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/textView" />
     
    </LinearLayout>


    下面看主Activity文件的实现,其内容如下:

    package com.liuhaoyu;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    	public Handler handler;
    	
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            final TextView text = (TextView)findViewById(R.id.textView);
            handler = new Handler() {
        		public void handleMessage(Message msg) {
        			Log.i("Looper",String.valueOf(msg.what));
        			if(msg.what == 0x0)
        			{
        				text.append(Integer.toString(msg.arg1));
        			}
        			} 
        		};
     
        	Thread thread = new Thread(new Runnable() {
        		public void run() {
        			int i = 0;
        			while(true)
        			{
        				try {
    						Thread.sleep(1000);
    					} catch (InterruptedException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
                        Message message = new Message();
                        message.arg1 = i;
                        message.what = 0x0;
                        handler.sendMessage(message);
                        
                        if(i < 9)
        					i++;
        				else
        					i = 0;
        			}
        		}
        	});
        	thread.start();
        }
    }


  • 相关阅读:
    千百撸
    迅捷PDF转换器(在线)
    request不能接受前端传来的参数的问题
    新买的orico蓝牙usb连接器使用方法与驱动
    win8.1下右下角出现大小写切换状态显示框解决方案
    idea tomcat 热部署方法
    set方法在set传入值时报空指针异常,直接设置定值即可
    eclipse项目转移至IDEA与IDEA tomcat报错(idea自带tomcat版本太高)与war包部署到win服务器与idea提交git的总结
    GNS3 jungle newsfeed 隐藏
    解决 sr 的端口占用问题
  • 原文地址:https://www.cnblogs.com/james1207/p/3278123.html
Copyright © 2011-2022 走看看