没有合适的资源?快使用搜索试试~ 我知道了~
android学习笔记之消息机制,异步和多线程.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 181 浏览量
2021-12-16
09:37:26
上传
评论
收藏 14KB PDF 举报
温馨提示
试读
3页
android学习笔记之消息机制,异步和多线程.pdf
资源推荐
资源详情
资源评论
android 学习笔记之消息机制,异步和多线程 .txt51 自信是永不枯竭的源泉,自信是奔腾不
息的波涛,自信是急流奋进的渠道,自信是真正的成功之母。有了 framework 后,我们不用
面对赤裸裸的 OS API,做一些重复而繁杂的事情。但天下没有免费的午餐,我们还是需要学
会高效正确的使用不同的 framework ,很多处理某一特定问题的手法在不同的 framework 中,
用起来都会有所不同的。
在 Android 中,下层是 Linux 的核,但上层的 java 做的 framework 把这一切封装的密不透风。
以消息处理为例,在 MFC中,我们可以用 PreTranslateMessage 等东东自由处理消息,在 C#
中,Anders Hejlsberg 老大说了,他为我们通向底层开了一扇 “救生窗”,但很遗憾, 在 Android
中,这扇窗户也被关闭了(至少我现在没发现 ... )。
在 Android 中,你想处理一些消息(比如: Keydown之类的 ... ),你必须寻找 Activity 为你
提供的一些重载函数(比如 onKeyDown 之类的 ... )或者是各式各样的 listener (比如
OnKeyDownListner 之类的 ... )。这样做的好处是显而易见的, 越多的自由就会有越多的危险
和越多的晦涩,条条框框画好了,用起来省心看起来省脑,这是一个设计良好的 framework
应该提供的享受。对于我目前的工程而言,我没有什么 BT 的需求在当前 API 下做不到的,
google 的设计 ms还是很 nice 的。
但世界是残酷的,有的时候我们还是必须有机制提供消息的分发和处理的,因为有的工作是
不能通过直接调用来同步处理的, 同时也不能通过 Activity 中内嵌的消息分发和接口设定来
做到, 比如说事件的定时触法, 异步的循环事件的处理, 高耗时的工作等等。 在 Android 中,
它提供了一些蛮有意思的方式来做这件事情(不好意思,我见不多识不广,我没见过类似玩
法,有见过的提个醒 && 嘴下超生 ^_^ ),它有一个 android.os.Handler 的类, 这个类接受一
个 Looper 参数,顾名思义,这是一个封装过的,表征消息循环的类。默认情况下, Handler
接受的是当前线程下的消息循环实例,也就是说一个消息循环可以被当前线程中的多个对象
来分发,来处理(在 UI 线程中,系统已经有一个 Activity 来处理了,你可以再起若干个
Handler 来处理 ... )。在实例化一个 handlerInstance 之后,你可以通过 sendMessage 等消
息 发 送 机 制 来 发 送 消 息 , 通 过 重 载 handleMessage 等 函 数 来 分 发 消 息 。 但 是 ! 该
handlerInstance 能够接受到的消息,只有通过 handlerInstance.obtainMessage 构造出来
的 消 息 ( 这 种 说 法 是 不 确 切 的 , 你 也 可 以 手 动 new 一 个 Message, 然 后 配 置 成 该
handlerInstance 可以处理的,我没有跟进去分析其识别机制,有兴趣的自己玩吧 ^_^ )。也
就是说 A, B, C, D都可以来处理同一线程内的消息分发,但各自都只能处理属于自己的那一
份消息,这抹杀了 B 想偷偷进入 A 领地,越俎代庖做一些非份之事的可能(从理论上看, B
还是有可能把消息伪装的和 A 他们家的一样,我没有尝试挑战一下 google 的智商,有 BT 需
求的自行研究 ^_^ )。这样做,不但兼顾了灵活性,也确保了安全性,用起来也会简单,我的
地盘我做主,不用当心伤及无辜,左拥右抱是一件很开心的事情。 。。
很显然,消息发送者不局限于自己线程,否者只能做一些定时,延时之类的事情,岂不十分
无趣。在实例化 Handler 的时候, Looper 可以是任意线程的,只要有 Handler 的指针,任何
线程也都可以 sendMessage(这种构造方式也很有意思,你可以在 A 线程里面传 B 线程的
Looper 来构造 Handler ,也可以在 B 线程里构造, 这给内存管理的方法带来很大的变数 ... )。
但有条规则肯定是不能破坏的,就是非 UI 线程,是不能触碰 UI 类的。在不同平台上有很多
解决方式 (如果你有多的不能再多的兴趣, 可以看一下很久很久以前我写的一个, 不 SB不要
钱)。我特意好好跟了一下 android 中的 AsyncQueryHandler 类,来了解 google 官方的解决
方案。
AsyncQueryHandler 是 Handler 的子类, 文档上说, 如果处理 ContentProvider 相关的内容,
不用需要自行定义一套东西,而可以简单的使用 async 方式。我想指代的就应该是
AsyncQueryHandler 类。该类是一个典型的模板类,为 ContentProvider 的增删改查提供了
资源评论
筱筱笎琞
- 粉丝: 8
- 资源: 15万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 3122080306 邹子轩 实验报告二.docx
- 基于STM32 NUCLEO板设计彩色LED照明灯(纯cubeMX开发)(大赛作品,文档完整,可直接运行)
- 发那科工业机器人保养大全
- Sphere.h
- REMD固有时间尺度分解信号分量可视化(Matlab完整源码和数据)
- 嵌入式系统双单片机STC89C52+STC15W104多功能学习板电路图可扩展 适用于单片机初学者和教学
- 基于STM32蓝牙控制小车系统设计(硬件+源代码+论文)大赛作品
- XILINXFPGA源码基于Spartan3火龙刀系列FPGA开发板VGA测试例程
- Java聊天室的设计与实现【尚学堂·百战程序员】
- python中matplotlib教程
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功