作品分享
问答交流
发现
任务
客服工单
Handler借助handler#sendMessage(message)方法,把消息Message对象插入消息队列MessageQueue对象中,同时Looper对象循环往复地从MessageQueue对象中取下一个消息Message对象分发给Looper对象地点线程去处理处罚,云云循环往复。
留意: 同一个线程中,Looper和MessageQueue有且只有一个实例,能且只能在该线程内部实例化。Handler可有多个实例,可在任意线程内实例化,但前需包管实例化动作地点线程的Looper已被初始化。另外,也可以通过调用带Looper参数的Handler构造器实例化,以达到关联指定线程(Looper地点)的目的。
应用启动时,ActivityThread.main(String[])内部会提前初始化Looper。故在主线程内部,可直接利用Handler的无参数构造器实例化。
如上所述,子线程利用Handler必要先确保Looper已被初始化,但子线程默认是没有初始化Looper的,故需在子线程实行的一开始自动调用Looper.prepare()和Looper.loop()。以后则可如在主线程一般任意实例化Handler。
即封装了Handler的Thread子类。HandlerThread#start()被调用后,该线程内部会初始化Looper实例。其他线程可从该HandlerThread对象中取出Looper实例,并用它构造出新的Handler对象。以后其他线程可借助该Handler对象,调用Handler#sendMessage(message)给HandlerThread的线程发送消息。
举报
Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )
GMT+8, 2024-11-23 19:54, Processed in 0.172651 second(s), 32 queries.© 2003-2025 cbk Team.