(转自: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. 利用Canvas编辑图片

    使用<canvas>对象在浏览器中把一幅彩色图片变成灰度图片. grayscale.html <!DOCTYPE html> <html lang="en&qu ...

  2. spring 3.x变通实现@Conditional注解的功能

    在某些情况下,我们要根据当前的系统配置决定是否初始化一个bean,也就是条件性加载,比如本地缓存或者分布式缓存,亦或是采用http实现或者socket实现.在spring 4.x中,可以使用新增的@C ...

  3. SQL Server 跨库同步数据

    最近有个需求是要跨库进行数据同步,两个数据库分布在两台物理计算机上,自动定期同步可以通过SQL Server代理作业来实现,但是前提是需要编写一个存储过程来实现同步逻辑处理.这里的存储过程用的不是op ...

  4. Semantic UI – 完全语义化的前端界面开发框架

    Semantic UI 是一个 UI 库,使前端开发更简单,更容易学习.Semantic UI 介绍了许多界面元素.在大多数情况下,只有你需要的元素建立一个自定义的构建可能是最好的. UI 组件分为四 ...

  5. 【追寻javascript高手之路05】理解事件流

    前言 新的一天又开始了,我们对今天对未来抱有很大期待,所以开始我们今天的学习吧,在此之前来点题外话,还是爱好问题. 周三的面试虽然失败,但是也是很有启迪的,比如之前我就从来没有想过爱好问题,我发现我的 ...

  6. JavaScript学习笔记2之Tab切换

    1.Tab切换简写版1 页面布局如下: <div id="tab"> <h1 id="title"> <span class=&q ...

  7. JavaScript 使用反斜杠对代码行进行折行

    JavaScript对代码行进行折行-使用反斜杠 您可以在文本字符串中使用反斜杠对代码行进行换行.下面的例子会正确地显示: <html> <head> <script t ...

  8. Linux机器24项安全合规设置

    工作的一些内容,这是中国移动集团当前linux机器安全合规标准,找了点时间将其归类,并查了一些资料,每项配置是什么意思,不仅要知其然,还要知其所以然.好记性不如烂笔头. 1.  检查FTP配置-限制用 ...

  9. Gartner:用自适应安全架构来应对高级定向攻击

    发表于2015-06-24   摘要:当前的防护功能难以应对高级的定向攻击,由于企业系统所受到的是持续攻击,并持续缺乏防御力,面向“应急响应”的特别方式已不再是正确的思维模式,Garnter提出了用自 ...

  10. MyEclipse 2015免费在线公开课,2月5日开讲

    MyEclipse 2015免费在线公开课,2月5日开讲,由MyEclipse官方高级PM Brian Fernandes 主讲. 主讲内容: 更好地支持javascript和技术模块 全新的REST ...