当前位置: 首页 > wzjs >正文

企业网站开发培训湖南省建设工程造价管理总站网站

企业网站开发培训,湖南省建设工程造价管理总站网站,网络营销就业方向,seo关键词排名技巧解释表​ 代码比喻作用Looper.prepare()搭建快递仓库创建消息队列(MessageQueue)new Handler()雇佣快递员绑定当前线程的 Looper,负责收发消息Looper.loop()快递站开始运营启动无限循环,不断从队列取消息处理handler.sendMessage…

解释表​

代码比喻作用
Looper.prepare()搭建快递仓库创建消息队列(MessageQueue)
new Handler()雇佣快递员绑定当前线程的 Looper,负责收发消息
Looper.loop()快递站开始运营启动无限循环,不断从队列取消息处理
handler.sendMessage()往仓库放包裹将消息放入队列
handleMessage()快递员处理包裹收到消息时执行对应操作
Looper.quit()关闭快递站停止消息循环(需在子线程需要退出时调用)
  1. ​主线程天生有快递站​​(自动创建 Looper)
  2. ​子线程要自己建仓库​​(先调用 Looper.prepare()
  3. ​快递员必须绑定仓库​​(new Handler() 必须在 prepare() 之后)
  4. ​开张才能处理包裹​​(必须调用 Looper.loop()
场景代码示例说明
​子线程更新 UI​new Handler(Looper.getMainLooper())让主线程执行界面操作
​定时任务​Handler(Looper.getMainLooper()).postDelayed()在主线程延迟执行
​防止内存泄漏​配合 WeakReference,避免持 Activity 引用安全地操作主线程的 UI

常见问题​

Q:主线程调用 Looper.getMainLooper() 会得到什么?
  • 主线程默认已有 Looper,因此会返回自身的 Looper,等同于直接调用 new Handler()
Q:为什么子线程不直接用 new Handler()
  • 子线程默认没有 Looper,必须手动调用 Looper.prepare() + Looper.loop()。想通主线程发任务时,必须指定主线程的 Looper

​技术原理总结​

术语作用
​Looper​消息循环管理者,每个线程最多一个。主线程的 Looper 存在于整个应用生命周期。
​getMainLooper()​静态方法,全局获取主线程的 Looper。
​主线程 Activity​自带一个运行中的 Looper,由系统自动创建。

Handler 是“传话员”​​:把子线程的任务结果“告诉”主线程,让主线程去更新界面。

// 子线程中通过 Handler 更新 UI
new Thread(() -> {String data = downloadData(); // 耗时操作new Handler(Looper.getMainLooper()).post(() -> {textView.setText(data); // 主线程更新 UI});
}).start();

123

// 5秒后执行任务
new Handler(Looper.getMainLooper()).postDelayed(() -> {startActivity(new Intent(this, NextActivity.class));
}, 5000);

Looper 是“循环传送带”​​:持续从消息队列中取出任务,交给 Handler 处理。

// 步骤1:创建 Handler(快递员)
Handler handler = new Handler(Looper.getMainLooper()) {@Overridepublic void handleMessage(Message msg) {// 步骤4:处理消息(拆包裹)if (msg.what == 100) {Toast.makeText(MainActivity.this, (String) msg.obj, Toast.LENGTH_SHORT).show();}}
};// 步骤2:获取消息对象(拿空包裹)
Message message = handler.obtainMessage();
message.what = 100;       // 消息类型
message.obj = "任务完成";  // 包裹内容// 步骤3:发送消息(派送包裹)
handler.sendMessage(message);
方法比喻使用场景是否需手动调用
handleMessage()拆包裹并执行任务接收并处理消息自动调用(需重写)
obtainMessage()领取空包裹需要发送消息时手动调用
sendMessage()派送包裹将消息发送到目标 Handler手动调用

5. 常见问题​

​Q:为什么用 obtainMessage() 而不是 new Message()?​
  • ​内存优化​​:obtainMessage() 从消息池复用对象,减少内存分配和垃圾回收。
  • ​代码对比​​:
    // ❌ 不推荐:频繁创建新对象
    Message msg = new Message();// ✅ 推荐:复用消息池中的对象
    Message msg = handler.obtainMessage();
​Q:sendMessage() 和 post() 有什么区别?​
  • sendMessage()​:发送 Message 对象(需在 handleMessage() 中处理)
  • post(Runnable)​:直接发送任务代码(自动封装为 Message
    // post 示例
    handler.post(() -> textView.setText("直接执行任务"));
    http://www.dtcms.com/wzjs/583563.html

    相关文章:

  • 网站建设需要什么资料呼和浩特百度公司
  • 萝岗电子商务网站建设学多久可以做网站 知乎
  • 网站怎么做身份验证电子商务运营推广
  • 网站免费建站 网页不需要备案东莞哪家网站建设专业
  • 企业建网站的案例桂林市国龙外国语学校
  • 网站开发与设计作业网站内链建设和外链的推广
  • 域名备案网站备案怎么关闭网站安全检测
  • 遵义服务好的网站建设公司怎样做货源网站
  • 一个备案号多个网站网站开发安全性分析
  • 网页在线生成网站企业信用信息查询公示系统陕西
  • 为什么做红酒网站分类目录的作用
  • 国外免费搭建网站源码凡科建站网址
  • 响应式网站设计的现状pc开奖网站开发
  • 做网站互联网公司坑梓网站建设方案
  • 网站外包公司该如何运营淘宝关键词优化软件
  • 外贸公司网站建设需要注意嘉兴做网站多少钱
  • 网站哪里可以做做亚马逊跨境电商赚钱吗
  • 制作网站的步骤有哪些视频点播网站开发教程
  • wordpress 建两个网站wordpress 运行很慢
  • pc端网站建设电话wordpress网站文件目录
  • 商城网站建设方案 2017重庆造价协会官网
  • 制作视频用什么app东莞百度网站优化
  • 网站开发营销网站多少钱php网站是什么
  • 怎么用群晖做网站建设网站开发公司
  • 海拉尔做网站多少钱装修网站线怎样做
  • 怎么做网站 白网络营销推广的作用
  • 销售手机网站龙城网站建设
  • 深圳建站模板购买网站建设合同要注意什么
  • 个人网站模板响应式icp备案查询官网
  • 网站建设多少钱一个网站制作完成后如何发布