当前位置: 代码迷 >> Android >> Android入门(五)最简单的Handler例子
  详细解决方案

Android入门(五)最简单的Handler例子

热度:96   发布时间:2016-05-01 14:53:43.0
Android入门(5)最简单的Handler例子

一、提要

     昨天和今天都在看这个东西,关键是我Java的水平也就是Just soso,当时上课的时候线程和进程这方面并没有深入去学习,结果现在就悲剧了...

     但经过将近两天的学习,还算有点起色。

    下面是最简单的一个Handler实现,效果是点击startButton之后,不断更新进度条,满了 之后给出提示。



二、Handler简介

什么是Handler 

handler通俗一点讲就是用来在各个进程之间发送数据的处理对象。在任何进程中,只要获得了另一个进程的handler则可以通过 handler.sendMessage(message)方法向那个进程发送数据。基于这个机制,我们在处理多线程的时候可以新建一个thread,这 个thread拥有UI线程中的一个handler。当thread处理完一些耗时的操作后通过传递过来的handler像ui线程发送数据,由UI线程 去更新界面。

 Handler类的常用方法

方法签名

描     述

public void handleMessage (Message msg)

子类对象通过该方法接收信息

public final boolean sendEmptyMessage (int what)

发送一个只含有 what 值的消息

public final boolean sendMessage (Message msg)

发送消息到 Handler ,

通过 handleMessage 方法接收

public final boolean hasMessages (int what)

监测消息队列中是否还

有 what 值的消息

public final boolean post (Runnable r)

将一个线程添加到消息队列

 

开发带有Handler类的程序步骤

在Activity或Activity的Widget中开发Handler类的对象,并重写handleMessage方法。

在新启动的线程中调用sendEmptyMessage或者sendMe ssage方法向Handler发送消息。

Handler类的对象用handleMessage方法接收消息,然后根据消息的不同执行不同的操作。


三、代码清单

package com.example.progressbar;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.ProgressBar;import android.widget.Toast;import android.view.View.OnClickListener;public class ProgressBarHandle extends Activity {	ProgressBar bar=null;	Button startButton=null;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_progress_bar_handle);        bar=(ProgressBar)findViewById(R.id.myProgressBar1);        startButton=(Button)findViewById(R.id.myButton);        startButton.setOnClickListener(new ButtonListener());    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.activity_progress_bar_handle, menu);        return true;    }    class ButtonListener implements OnClickListener    {		@Override		public void onClick(View v) {			// TODO Auto-generated method stub			bar.setVisibility(View.VISIBLE);			updateBarHandler.post(updateThread);		}    	    }    Handler updateBarHandler=new Handler(){    	@Override    	public void handleMessage(Message msg)    	{    		bar.setProgress(msg.arg1);    		updateBarHandler.post(updateThread);    	}    	    };    Runnable updateThread=new Runnable()    {    	int i=0;		@Override		public void run() {			// TODO Auto-generated method stub			System.out.println("Begin Thread");			i+=10;			Message msg=updateBarHandler.obtainMessage();			msg.arg1=i;			try{				Thread.sleep(1000);			}catch(InterruptedException e)			{			e.printStackTrace();				}			updateBarHandler.sendMessage(msg);			if(i==100)				{				updateBarHandler.removeCallbacks(updateThread);				Toast.makeText(getApplicationContext(),    	                    "Done!",   	                    Toast.LENGTH_SHORT).show();   				}		}    	    };    }



四、参考资料

Android developers:http://developer.android.com/training/basics/firstapp/running-app.html   google的官方教程,非常推荐。

雷一的博客:http://www.cnblogs.com/rayee/tag/Android/ 素然只有四篇,但作为入门教程还是很不错的。

Android 开发教程:网上流传的教程,缺点是有点老。
  相关解决方案