android第十一章handler

一切和屏幕更新相关的都是handler处理的

线程创建

所有的jvm语言都是jvm来调度的
继承thread
new,thread().statr();
实现runnadle
new,thread(new,runnadle()).statr();

主线程和子线程

每个应用启动的第一条线程就是主线程
在android中,ui线程就是主线程.main线程
android的两条规定
主线程不允许使用网络
了线程不允许更改ui
因为网络请求时间不等,其实所有的延迟任务都不应该放在主线程,因为会卡主线程的,导致anr异常

anr异常

应用程序ui现成堵塞5秒以上.就会出现anr
所有阻塞方法(键盘输入,线程休眠,线程暂停,流,无限循环
如何处理anr异常
将耗时任务放入子线程中执行

handler通信

在不同的线程中传递信息,能做到任何线程间通信
一般都是实现子线程刷新ui
在activty中直接runonuithread方法就可以将runnable放入线程中执行
内部就是使用handler来完成的
四种启动模式
view的事件分民机制
android线程通信机制

looper循环者

looper线程
是一个无线循环的线程,调用looper.prepare()方法将一个普通线程提升到循环者,提升到循环者后,会添加一个messagequeue的消息队列,在调用looper.loop()方法,无限循环来炎messagequeue取消息,转发给发送消息的handler来处理

messagequeue

消息队列,先进先出

message

一个消息的抽象描述,可以包含一个对象,或者一个任务.
提供了两个int字段,用于存放int值
提供一个what字段,用来区分消息是谁发送的
提供一个object字段,用来存储一个对象(序列化)
提供一个runnable字段,用来存储一个任务
message一般不用new出来.而是通过handler对象来取出

handler

handler用来发送消息,必须绑定一个looper中的messagequeue,不管在哪条线程发消息,总是发送到他绑定的消息队列中,循环则将消息取出来之后,在送给发消息的handle处理,这时候已经完成了线程通信
handler的方法
发送空消息(只包含一个what字段),延迟,在某个时间(也会封装成一个message只不过只不过只有一个what而已)
发送消息(包含一个message对象)延迟,某个时间
执行一个任务(延迟执行;
//取消洗牌或者任务
handber.removemessage(what);
handler.removecallback(runnable);
子线程修改ui了
only.the.original.thread.that.creaed.a.view.hierarchy.can.touch.its.views
//eventbus
//rxjava->reandroid

asynctask

//我非常讨厌用他,sdk中到处都是这个
轻量级的异步处理任务
asynctask类有三个泛型参数,有5个重用方法,有一个必须的方法
asynctask<任务参数,进度参数 ,返回参数>
//我要去下载一张图片
//”图片地址就是参数,下载多少呢就是进度返回bitmap就是返回参数
int-integer void-void
onpreexecute()主线程
doinbackground()子线程
如果在2个调用publishprogress,就会执行onprogressupdate()方法
onpostexecute();任务执行完毕
//有什么bug呢
4.4之前有bug,任务最大128个
遍历本地图片,显示在gridview中

线程池

4种线程池
固定
executors.newfixedthreadpool(并发数);
定时器
executors.newscheduledthreadpool()和timer差不多,精准一点
缓存
executors.newcachedthreadexecutor()缓存的.重用
单个
executors.newsinglethreadexecutor()单个任务列队
加入一个任务
execute(runnable);
关闭线程池
shutdown();当前还有的任务全部会执行,不会再加入新的任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值