原理图:

handler详解_android


1)Handler采用消息模式,用于子线程和主线程之间的通信。当子线程完成操作时,就会给主线程发一个

消息。通知主线程进行显示更新。。。

2)只有主线程才能对显示进行操作。

3)activity程序默认是一个单独的线程里面来运行。onCreate()  按钮点击回调事件、对于显示的操作都是在主线程里面运行。主线程也称为UI线程。
4)联网获取数据、大文件的拷贝都需要放置在子线程来操作。


使用

1、main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    

    <TextView 
        android:id="@+id/tv_number"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="0"
        />
    
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="add"
        android:text="增加"
        />
</LinearLayout>


2、MainActivity


package com.njupt.thread_handler1;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

	private static final int UPDATE_DISPLAY = 1;
	private TextView tv_number;
	
	Handler mHandler = new Handler(){
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case UPDATE_DISPLAY:
				int i = (Integer) msg.obj;
				
				tv_number.setText("章泽天是我的女神。。。"+i + "");
				
				break;

			default:
				break;
			}
		};
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	    
		tv_number = (TextView) findViewById(R.id.tv_number);
	}

	public void add(View v){
		new Thread(){
			public void run() {
				int i = 0;
				while(i < 60){
					i = i + 1;
					
					SystemClock.sleep(1000);
					Message msg = new Message();
					
					msg.what = UPDATE_DISPLAY;
					msg.obj = i;
					mHandler.sendMessage(msg);
				}
			};
		}.start();
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}