Android-Looper类介绍

本文深入解析Android系统中的Looper类与Handler类的作用与使用方法,包括Looper的创建、消息队列的管理以及如何在非主线程中通过Looper与Handler进行消息交互,最后展示如何实现主线程向子线程发送消息的应用实例。

         Android中的Looper类,是用来封装消息循环和消息队列的一个类,用于在android线程中进行消息处理。

                               Handler其实可以看做是一个工具类,用来向消息队列中插入消息的。

(1) Looper
类用来为一个线程开启一个消息循环
     
默认情况下android中新诞生的线程是没有开启消息循环的。(主线程除外,主线程系统会自动为其创建Looper对象,开启消息    循环。)
    Looper
对象通过MessageQueue来存放消息和事件。一个线程只能有一个Looper,对应一个MessageQueue

(2)
通常是通过Handler对象来与Looper进行交互的Handler可看做是Looper的一个接口,用来向指定的Looper发送消息及定义处理方法。
   
默认情况下Handler会与其被定义时所在线程的Looper绑定,比如,Handler在主线程中定义,那么它是与主线程的Looper绑定。
mainHandler = new Handler()
等价于new HandlerLooper.myLooper().
Looper.myLooper()
:获取当前进程的looper对象,类似的Looper.getMainLooper() 用于获取主线程的Looper对象。

(3)
在非主线程中直接newHandler() 会报如下的错误:
     E/AndroidRuntime( 6173): Uncaught handler: thread Thread-8 exiting due touncaught exception
     E/AndroidRuntime( 6173): java.lang.RuntimeException: Can't create handlerinside thread that has not called Looper.prepare()
     原因是非主线程中默认没有创建Looper对象,需要先调用Looper.prepare()启用Looper

(4) Looper.loop();

     让Looper开始工作,从消息队列里取消息,处理消息。

   
注意:写在Looper.loop()之后的代码不会被执行,这个函数内部应该是一个循环,当调用mHandler.getLooper().quit()后,loop才会中止,其后的代码才能得以运行。

(5)
基于以上知识,可实现主线程给子线程(非主线程)发送消息。

   
把下面例子中的mHandler声明成类成员,在主线程通过mHandler发送消息即可。
   
   * Android官方文档中Looper的介绍:
         Class used to run a message loop for a thread. Threads by default do not have amessage loop associated with them; to create one, call prepare() in the threadthat is to run the loop, and then loop() to have it process messages until theloop is stopped.

Most interaction with a message loop is through the Handler class.

This is a typical example of the implementation of a Looper thread, using theseparation of prepare() and loop() to create an initial Handler to communicatewith the Looper.

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值