android Looper demo
在Android开发中,`Looper`、`Handler`和`MessageQueue`是三个关键组件,它们共同构成了Android消息处理系统,用于实现线程间的通信,尤其是让UI线程能够响应非UI线程的数据更新。让我们深入探讨一下这些概念及其在实际应用中的作用。 我们来看`Looper`。`Looper`是一个循环器,它会在一个线程中不断地检查是否有待处理的消息(`Message`)。如果没有消息,`Looper`就会等待,直到有新的消息到来。在Android系统中,主线程(也称为UI线程)默认已经有一个`Looper`在运行,而自定义的工作线程通常需要我们手动调用`Looper.prepare()`和`Looper.loop()`来初始化并启动`Looper`。 接着,我们讨论`Handler`。`Handler`是消息的处理者,它与特定的`Looper`关联。当我们创建一个`Handler`对象时,可以指定它处理消息的方式。我们可以通过`Handler`的`sendMessage()`或`post()`方法发送消息。消息会进入与该`Handler`关联的`MessageQueue`,然后在`Looper`的调度下被处理。`Handler`不仅可以发送消息,还可以执行Runnable对象,达到异步操作的效果。 `MessageQueue`则是消息队列,它是`Looper`从`Handler`接收消息的地方。每个`Handler`都会有自己的`MessageQueue`,并且当`Handler`发送消息时,消息会被添加到这个队列中,等待`Looper`取出并分发。 现在,让我们结合`android Looper demo`的场景来看这些概念的应用: 1. 主线程内消息发送:在主线程中创建一个`Handler`,然后通过这个`Handler`发送消息。这通常用于更新UI或者执行其他与UI相关的操作。由于主线程已经有一个`Looper`在运行,因此消息会立即被处理。 2. 子线程向主线程发送消息:在子线程中,我们需要先调用`Looper.prepare()`,然后创建一个`Handler`实例,并将其发送的消息指向主线程的`Handler`。这样,子线程完成计算等耗时操作后,可以通过`Handler`将结果发送回主线程,主线程的`Looper`会处理这个消息,从而更新UI。 3. 主线程向子线程发送消息:主线程可以通过创建一个与子线程`Looper`关联的`Handler`来实现这个功能。然而,由于子线程可能没有默认的`Looper`,所以我们需要在子线程内部调用`Looper.prepare()`和`Looper.loop()`。主线程的`Handler`发送消息到这个子线程的`Handler`,子线程的`Looper`会处理这些消息。 在`LooperLearn`这个项目中,我们可以期待看到关于如何创建和使用`Looper`、`Handler`的示例代码,以及如何在不同线程之间传递消息的实际操作。这些示例将有助于开发者理解Android的消息处理机制,并能在实际开发中有效利用这一机制进行多线程编程,确保UI线程的流畅性。
LooperLearn.rar (48个子文件)
LooperLearn
bin
classes.dex 546KB
res
drawable-hdpi
ic_launcher.png 6KB
drawable-xhdpi
ic_launcher.png 9KB
drawable-xxhdpi
ic_launcher.png 17KB
drawable-mdpi
ic_launcher.png 3KB
LooperLearn.apk 229KB
jarlist.cache 120B
dexedLibs
android-support-v4-6b30c6518bdab9433dc5f7eb600f2b7a.jar 185KB
classes
com
jerry
test
MainActivity.class 4KB
BuildConfig.class 337B
MainActivity$2.class 2KB
MainActivity$1.class 881B
R$layout.class 391B
R$id.class 381B
R$drawable.class 395B
R$dimen.class 449B
MainActivity$1$1.class 1KB
R$attr.class 328B
R$menu.class 376B
R.class 633B
R$string.class 460B
MainActivity$EventHandler.class 986B
R$style.class 419B
resources.ap_ 40KB
AndroidManifest.xml 870B
res
drawable-ldpi
values-v11
styles.xml 334B
menu
main.xml 263B
values-v14
styles.xml 391B
drawable-hdpi
ic_launcher.png 7KB
drawable-xhdpi
ic_launcher.png 12KB
drawable-xxhdpi
ic_launcher.png 24KB
values
strings.xml 228B
styles.xml 697B
dimens.xml 220B
values-sw720dp-land
dimens.xml 277B
drawable-mdpi
ic_launcher.png 4KB
values-sw600dp
dimens.xml 203B
layout
activity_main.xml 666B
proguard-project.txt 781B
ic_launcher-web.png 50KB
assets
gen
com
jerry
test
BuildConfig.java 156B
R.java 2KB
src
com
jerry
test
MainActivity.java 5KB
.project 847B
.classpath 475B
project.properties 563B
AndroidManifest.xml 870B
libs
android-support-v4.jar 473KB- 1
simom_fu2018-04-04可以用,东西也不错,谢谢
olfls2014-12-11非常感谢,解决了我项目上的问题。
JackHan2014-08-20可以用,东西也不错,谢谢
- 粉丝: 10
我的内容管理
展开
我的资源
快来上传第一个资源
我的收益 登录查看自己的收益
我的积分
登录查看自己的积分
我的C币
登录后查看C币余额
我的收藏
我的下载
下载帮助
前往需求广场,查看用户热搜最新资源
- 《C语言程序设计》期考考试A卷(第学期).doc
- 基于区块链技术的数字图书馆个人数据保护研究.docx
- 《软件工程与UML》期末测试试题.doc
- FPGA-可编程单脉冲发生器方案设计书.doc
- (源码)基于Arduino的星空追踪仪.zip
- 信息化环境下初中语文综合性学习活动教与学模式初探.docx
- 面向人脸图像研究的数据集资源汇总与整理
- 《Delphi编程技术》的实例教学法200908.doc
- 基于单片机的温度控制系统方案设计书.doc
- 《PLC编程及应用技术实训》课程标准.doc
- 聚类分析在企业网络营销中的应用-客户关系.docx
- (源码)基于 React 和 Koa 的多媒体资料管理平台.zip
- 特殊教育信息化环境建设与应用现状调查分析.docx
- 基于RBF神经网络的人脸识别算法.docx
- 基于等效热降理论的火电厂经济性算法模型组件的探讨.docx
- 物联网冷链监测管理系统.docx


信息提交成功