Android:用Handler实现异步处理功能

  次阅读 作者:智能小宝 来源:互联网 2016-01-19 11:08 我要评论(0)

若把一些类似于下载的功能写在Activity里,会导致Activity阻塞,长时间无响应,直至页面假死。因此,我们需要把这些耗时的操作放在单独的 子线程中操作,这就是Handler的使命。

一.一个问题

有这样一个问题值得我们思考,若把一些类似于下载的功能(既耗时且不一定有结果)写在Activity(主线程)里,会导致Activity阻塞, 长时间无响应,直至页面假死(如果5秒钟还没有完成的话,会收到Android系统的一个错误提示 "强制关闭")。因此,我们需要把这些耗时的操作放在单独的子线程中操作。这就是Handler的使命。Handler提供异步处理的功能,发送和接收不 是同时的(Activity的主线程和线程队列里的线程是不同的线程,并行进行,互不影响)。

二.Handler简介

Handler 为Android操作系统中的线程通信工具,它主要由两个作用:(1)安排消息或Runnable 在某个主线程中某个地方执行(2)安排一个动作在另外的线程中执行。每个Handler对象维护两个队列(FIFO),消息队列和Runnable队列, 都是有Android操作系统提供的。Handler可以通过这两个队列来分别:

发送、接受、处理消息 消息队列;

启动、结束、休眠线程 Runnable队列;

Handler的使用方法大体分为3个步骤:1.创建Handler对象。2.创建Runnable和消息。3.调用post以及 sendMessage方法将Runnable和消息添加到队列。

三.Runnable队列

1.java中的线程

在java中,线程的创建有两种方法:继承Thread类和实现Runnable接口。而这最重要的都是要复写run方法来实现线程的功能。当线程 的时间片到了,开始运行时,就执行run()函数,执行完毕,就进入死亡状态。

举个创建线程的例子:

Runnable r=new Runnable(){

@Override

public void run() {

// TODO Auto-generated method stub

System.out.println("thread");

handler.postDelayed(thread, 3000);

}

};

2.关于Runnable队列

(1)原理

Android的线程异步处理机制:Handler对象维护一个线程队列,有新的Runnable送来(post())的时候,把它放在队尾,而处 理 Runnable的时候,从队头取出Runnable执行。当向队列发送一个Runnable后,立即就返回,并不理会Runnable是否被执行,执行 是否成功等。而具体的执行则是当排队排到该Runnable后系统拿来执行的。这就好比邮局的例子。寄信者将信写好后放入邮筒就回家了,他并不知道邮件何 时被邮局分发,何时寄到,对方怎样读取这些事。这样,就实现了Android的异步处理机制。

(2)具体操作

向队列添加线程:

handler.post(Runnable );将Runnable直接添加入队列

handler.postDelayed(Runnable, long)延迟一定时间后,将Runnable添加入队列

handler.postAtTime(Runnable,long)定时将Runnable添加入队列

终止线程:

handler.removeCallbacks(thread);将Runnable从Runnable队列中取出

四.消息队列

1.消息对象

(1)Message对象

Message对象携带数据,通常它用arg1,arg2来传递消息,当然它还可以有obj参数,可以携带Bundle数 据。它的特点是系统性能消耗非常少。

初始化: Message msg=handler.obtainMessage();

(2)Bundle对象

Bundle是Android提供的类,可以把它看做是特殊的Map,即键值对的包。而它特殊在键和值都必须要是基本数据类型或是基本数据类型的数 组(Map的键值要求都是对象),特别的,键要求都是String类型。用Message来携带Bundle数据:

放入:msg.setData(Bundle bundle);

取出:msg.getData();

2.关于消息队列

(1)原理

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...