Android语言基础教程(223)Android Handler消息传递机制范例之开启新线程实现电子广告牌:Android Handler防坑指南:别让UI线程“卡成狗”,手把手教你开新线程

深度分析Android Handler消息传递机制

一、 引子:UI线程的“小暴脾气”与广告牌的诞生

想象一下,你正在一个超流畅的App里滑动屏幕,突然,画面一卡,整个应用直接罢工,弹出一个“应用未响应”的提示……是不是想砸手机?这就是触犯了Android世界的第一天条:绝对不要在UI线程(主线程)执行耗时操作!

UI线程,顾名思义,就是负责处理和更新用户界面的“老大”。它是个急性子,要求所有界面操作都必须快速完成。如果你让它在主线程里执行网络请求、读取大文件,或者像咱们今天要做的——让广告牌的文字无限循环轮播,它就会被“阻塞”。它一不爽,整个界面就“冻住”了,用户怎么点都没反应,最终结果就是ANR崩溃。

那怎么办呢?“惹不起,咱躲得起”——开个新线程去干这些脏活累活呗!

但问题又来了:Android规定,只有UI线程才能触摸和更新界面。这就好比,后台小弟(新线程)辛辛苦苦把货搬来了,但不能直接放进前台(UI)的橱窗里,他得找个“传话员”去告诉前台经理该换展示品了。

这个伟大的“传话员”,就是咱们今天的主角——Handler

我们的目标:打造一个如图所示的电子广告牌,文字自动、平滑地轮播,同时主界面操作依然流畅得飞起。

二、 Handler核心机制:解剖Android的“消息快递系统”

别被“机制”俩字吓到,咱们把它想象成一个公司里的快递系统,秒懂!

  1. Looper(循环器/仓库管理员):每个线程想收快递(消息),都得先雇一个Looper。它的工作就是死循环,不停地检查自己的“仓库”——MessageQueue里有没有新快递。UI线程天生就自带一个Looper,所以它能直接使用Handler。而我们开的新线程,如果想收消息,就得手动调用 Looper.prepare()Looper.loop() 来请这位管理员。
  2. MessageQueue(消息队列/仓库):一个先进先出的队列,专门用来存放Message。Looper就是从这个仓库里一件一件地取快递。
  3. Message(消息/快递包裹):这就是传递信息的基本单位。一个Message里可以装很多东西:what(标识码,像快递单号)、arg1arg2(整型数据)、obj(一个Object对象,比如字符串),等等。
  4. Handler(处理者/快递小哥+业务员):这是咱们程序员直接打交道的对象。它有两项绝活:
    • 送快递(Send Message):可以在任何线程(比如后台线程)调用 handler.sendMessage(msg),把消息扔到它关联的那个线
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值