(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html)

六、Android学习第五天——Handler的使用

注意:有很多功能是不能写在Activity中的,例如说下载或者处理大量的数据等,如果这类操作写在Activity中,就有可能导致整个Activity无响应甚至报错,这样用户体验就会比较差。所以此类功能应该独立于Activity,且互不干扰,所以Handler就应运而生了。Handler提供了一个异步的消息处理的方案,将具体复杂的操作都放在一个线程中取处理。

创建一个Handler对象的基本步骤如下:

(一)点击一个按钮,调用Handler的post方法,将要执行的线程对象添加到队列当中去。

(二)将要执行的操作写在线程对象的run()方法当中。

(三)如果想要循环执行,则可以在run方法内部执行Handler的postDelayed或者post方法,将线程反复加入到队列当中。

下面是使用Handler的一个简单的例子:

package mickey.handler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class HandlerTest extends Activity {

// 声明两个按钮控件
private Button begin = null;
private Button end = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// 根据控件的ID得到代表控件的对象,并为这两个按钮设置相应的监听器
begin = (Button) findViewById(R.id.begin);
begin.setOnClickListener(new StartButtonListener());
end = (Button) findViewById(R.id.end);
end.setOnClickListener(new EndButtonListener());

}

// 为start按钮设置的监听器
class StartButtonListener implements OnClickListener {

@Override
public void onClick(View v) {
// 无延迟,直接加入消息队列中,此时消息队列中只有此一个线程
// 调用handler的post方法,将要执行的线程对象添加到队列当中去
handler.post(updateThread);
}

}

// 为end按钮设置的监听器
class EndButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
handler.removeCallbacks(updateThread);
}
}

// 创建一个Handler对象
Handler handler = new Handler();
// 一个线程类,将要执行的操作写在线程对象的run方法当中
Runnable updateThread = new Runnable() {
@Override
public void run() {
System.out.println("run......");

// 在run方法内发执行postDelayed或者post方法,延迟三秒,将线程加入队列
handler.postDelayed(updateThread, 3000);
}
};

}

但是我们看到了,上面的例子中我们只是调用了线程的run()方法,并没用调用Thread的start()方法来重启一个线程,因此,上面这个例子中,实际上我们并没有重启一个新的线程,从始至终Handler都是和Activity在同一线程中的。

所以如果我们在使用Handler时,要重启一个线程,使用Handler.post(Thread thread)只是调用了该线程的run方法,我们只有使用java中重启线程的方法来重启一个新的线程,即调用Thread.start()方法,这儿不再多说

六、Android学习第五天——Handler的使用(转)的更多相关文章

  1. 【Android】完善Android学习(五:API 3.2)

    备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ...

  2. Android学习Scroller(五)——具体解释Scroller调用过程以及View的重绘

    PS: 该篇博客已经deprecated,不再维护.详情请參见  站在源代码的肩膀上全解Scroller工作机制  http://blog.csdn.net/lfdfhl/article/detail ...

  3. Android学习笔记-事件处理之Handler消息传递机制

    内容摘要:Android Handler消息传递机制的学习总结.问题记录 Handler消息传递机制的目的: 1.实现线程间通信(如:Android平台只允许主线程(UI线程)修改Activity里的 ...

  4. android 学习随笔五(界面)

    把数据库内容显示到界面 清单文件设置为线性布局(5大布局属于ViewGroup) 在清单文件中可以增加View显示 LinearLayout ll = (LinearLayout) findViewB ...

  5. android学习笔记25——事件处理Handler

    Handler消息传递机制 ==> android消息机制是另一种形式的“事件处理”,这种机制主要是为了解决android应用的多线程问题. ——android平台不允许Activity新启动的 ...

  6. android学习笔记五。1、Service深入学习

    一.Service,服务是没有界面而在后台长期运行的程序,可以看做是后台的Activity. 1.在Android中按返回键退出一个应用并不会(内存充足时)直接销毁一个进程,所以其中的子线程也可以在后 ...

  7. android学习笔记五——AutoCompleteTextView

    AutocompleteTextview ==> 使用比较容易,只需要为其设置一个Adapter,该Adapter封装其需要预设的文本内容. 如下所示实例: <RelativeLayout ...

  8. android学习笔记五

    Android中的category大全 Api Level 3(SDK 1.5)和Api Level 4(SDK 1.6): android.intent.category.ALTERNATIVE a ...

  9. Android学习笔记五:四大组件(转)

    转自:http://blog.csdn.net/shenggaofei/article/details/52450668 Android四大组件分别为activity.service.content ...

随机推荐

  1. HTTP狀態碼

    1xx消息 这一类型的状态码,代表请求已被接受,需要继续处理.这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束.由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非在某些试 ...

  2. MyEclipse常用插件使用教程

    一.Findbugs 1. 配置 1.1 打开FindBugs视图: Windows => Show View => Other… => FindBugs => Bug Inf ...

  3. NHibernate可视化设计插件——Mindscape.NHibernateModelDesigner

    我一直希望NHibernate能够支持像EF一样支持可视化操作,今天去网上搜了一下,发现有一个插件,类似EF的可视化功能. 下载地址:Mindscape.NHibernateModelDesigner ...

  4. 使用Yeoman快速启动AngularJS项目开发

    本博客停止更新,请访问新个人博客:owenchen.net 前言 博客迁移到了BAE上,http://owenchen.net/,以后的文章会首发在自己的博客上,随后在博客园发布. 很久没有写文章了, ...

  5. 变量作用域&函数作用域

    一. 变量作用域 1)全局变量 在全局环境下声明的变量被视为全局变量. 在没有使用var进行声明的时候,变量就被定义为全局变量.在ES5的严格模式下,如果变量没有使用var来声明是会报错的. 2)局部 ...

  6. 【web前端面试题整理07】我不理解表现与数据分离。。。

    拜师传说 今天老夫拜师了,老夫有幸认识一个JS高手,在此推荐其博客,悄悄告诉你,我拜他为师了,他承诺我只收我一个男弟子..... 师尊刚注册的账号,现在博客数量还不多,但是后面点会有干货哦,值得期待. ...

  7. HTML <a> 标签

    一,定义和用法 所有浏览器都支持 <a> 标签. <a> 标签定义超链接,用于从一张页面链接到另一张页面. <a> 元素最重要的属性是 href 属性,它指示链接的 ...

  8. 在Android中引入Java8的lambda表达式

    我用的是retrolambda这个插件,下面来说下如何添加它. 项目地址:https://github.com/evant/gradle-retrolambda 在根项目的build.gradle中添 ...

  9. '[<NSObject 0x8a4b500> setValue:forUndefinedKey:]

    Bug如下: Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUnd ...

  10. 工作中碰到的js问题(disabled表单元素不能提交到服务器)

    今天碰到一个奇葩的问题,asp页面表单提交后,有一个文本框<input type="text" name="phone" id="phone&q ...