android最简单的程序,Android入门(5)最简单的Handler例子

一、提要

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

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

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

0818b9ca8b590ca3270a3433284dd417.png

二、Handler简介

什么是Handler

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

Handler类的常用方法

方法签名

描     述

public void handleMessage (Messagemsg)

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

public final boolean sendEmptyMessage (int what)

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

public final boolean sendMessage (Messagemsg)

发送消息到 Handler ,

通过 handleMessage 方法接收

public final boolean hasMessages (int what)

监测消息队列中是否还

有 what 值的消息

public final boolean post (Runnabler)

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

开发带有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(); } } }; }

一句话总结:handler对线程的处理并没有启动一个新的线程 ,而是直接在原有的线程上调用run函数.和new Thread(),然后start()!

四、参考资料

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

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

Android 开发教程:网上流传的教程,缺点是有点老。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值