- 博客(16)
- 收藏
- 关注
原创 2021-05-13
学习Kotlin,看这一篇就够了http://toughcoder.net/blog/2018/05/17/introduction-to-kotlin-programming-language/
2021-05-13 15:05:07
100
原创 Handler之android消息机制(篇章十五)
消息机制指Handler、Looper、MessageQueue、Message之间如何工作的,首先是Looper会创建好带有Looper的线程等待其他线程发送消息过来,一旦有消息之后,Looper取出MessageQueue对头的Message,之后调用了Handler的dispatchMessage方法,把消息传给了Handler,之后消息到了工作线程(主线程)。 这里会问到,一个线程会有几个Looper,几个Handler,以及Looper会存在线程哪里?一个线程一个Looper,可以有多个Hand.
2021-03-23 13:30:20
83
原创 Handler之Android异步消息处理机制(篇章十四)
异步消息处理机制主要是用来解决子线程更新UI的问题主要有四个部分:①. Message (消息)在线程之间传递,可在内部携带少量信息,用于不同线程之间交换数据可以使用what、arg1、arg2字段携带整型数据obj字段携带Object对象②. Handler (处理者)主要用于发送和处理消息,sendMessage()用来发送消息,最终会回到handleMessage()进行处理③. MessageQueue (消息队列)主要存放所有通过Handler发送的消息,它们会一直存在于队列中等待被处理每个线
2021-03-23 13:29:14
105
原创 Handler之HandlerThread(篇章十三)
1、HandlerThreadHandlerThread本身也是Thread,只是在Thread基础上封装上了Handler的载体,而我们知道一个线程是可以有多个handler,所以用HandlerThread更加方便我们不用关心Handler的创建,一般用在多线程中直接处理任务。2、HandlerThread源码...
2021-03-23 13:28:05
98
原创 Handler之请解释下在单线程模型中Message,Handler,MessageQueue,Looper之间的关系(篇章十二)
拿主线程来说,主线程启动时会调用Looper.prepare()方法,会初始化一个Looper,放入Threadlocal中,接着调用Looper.loop()不断遍历MessageQueue,Handler的创建依赖与当前线程中的Looper,如果当前线程没有Looper则必须调用Looper.prepare()。Handler , sendMessage到MessageQueue,Looper不断从MessageQueue中取出消息,回调handleMessage方法。...
2021-03-23 13:24:33
134
原创 Handler的原理(篇章十)
与Handler密切相关的还有Message、MessageQueue、Looper。Message。Message有两个关键的成员变量:target、callback: (1) target。就是发送消息的Handler (2) callback。调用Handler.post(Runnable)时传入的Runnable类型的任务。post事件的本质也是创建了一个Message,将我们传入的这个runnable赋值给创建的Message的callback这个成员变量。 MessageQueue。消
2021-03-22 16:32:56
192
1
原创 Handler、Thread和HandlerThread的差别(篇章九)
Handler:在Android中负责发送和处理消息,通过它可以实现其他支线线程与主线程之间的消通讯Thread:线程,可以看作是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的独立运行的基本单位HandlerThread:封装了Handler + ThreadHandlerThread适合在有需要一个工作线程(非UI线程)+任务的等待队列的形式,优点是不会有堵塞,减少了对性能的消耗,缺点是不能同时进行多个任务的处理,需要等待进行处理。处理效率低,可以当成一个轻量级的线程池来用...
2021-03-22 16:30:31
519
原创 Handler之关于Handler,在任何地方new Handler 都是什么线程下(篇章七)
不传递 Looper 创建 Handler:Handler handler = new Handler();上文就是 Handler 无参创建的源码,可以看到是通过 Looper.myLooper() 来获取 Looper 对象,也就是说对于不传递 Looper 对象的情况下,在哪个线程创建 Handler 默认获取的就是该线程的 Looper 对象,那么 Handler 的一系列操作都是在该线程进行的。对于传递 Looper 对象创建 Handler 的情况下,传递的 Looper 是哪个线程的,Ha
2021-03-22 16:27:42
426
原创 Handler之ThreadLocal原理,实现及如何保证Local属性?(篇章六)
ThreadLocal:当某些数据是以线程为作用域并且不同线程具有不同的数据副本的时候,就可以考虑采用ThreadLocal。(Looper、ActivityThread以及AMS中都用到了),如使用ThreadLocal可以解决不同线程不同Looper的需求。虽然在不同线程中访问的是同一个ThreadLocal对象,但是它们通过ThreadLocal来获取到的值却是不一样的,这就是ThreadLocal的奇妙之处。ThreadLocal之所以有这么奇妙的效果,是因为不同线程访问同一个ThreadLoc
2021-03-22 16:26:10
332
原创 Handler之ActivityThread,Handler,MessageQueue,Looper,msg(Message),对这些类作简要介绍(篇章五)
ActivityThread:程序的启动入口,该类就是我们说的主线程,它对Looper进行操作的。Handler:字面意思是操控者,该类有比较重要的地方,就是通过handler来发送消息(sendMessage)到MessageQueue和 操作控件的更新(handleMessage)。handler下面持有这MessageQueue和Looper的对象。MessageQueue:字面意思是消息队列,就是封装Message类。对Message进行插入和取出操作。Message:这个类是封装消息体并被发送到M
2021-03-22 16:24:19
154
原创 Handler之Looper为什么要无限循环?(篇章四)
主线程中如果没有looper进行循环,那么主线程一运行完毕就会退出。那么我们还能运行APP吗,显然,这是不可能的,Looper主要就是做消息循环,然后由Handler进行消息分发处理,一旦退出消息循环,那么你的应用也就退出了。...
2021-03-22 16:22:01
106
原创 Handler之主线程中的Looper.loop()一直无限循环为什么不会造成ANR?(篇章三)
主线程Looper从消息队列读取消息,当读完所有消息时,主线程阻塞。子线程往消息队列发送消息,并且往管道文件写数据,主线程即被唤醒,从管道文件读取数据,主线程被唤醒只是为了读取消息,当消息读取完毕,再次睡眠。因此loop的循环并不会对CPU性能有过多的消耗。...
2021-03-22 16:19:27
521
原创 Handler之请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系(篇章二)
Android中主线程是不能进行耗时操作的,子线程是不能进行更新UI的。所以就有了handler,它的作用就是实现线程之间的通信。handler整个流程中,主要有四个对象,handler,Message,MessageQueue,Looper。当应用创建的时候,就会在主线程中创建handler对象,我们通过要传送的消息保存到Message中,handler通过调用sendMessage方法将Message发送到MessageQueue中,Looper对象就会不断的调用loop()方法不断的从MessageQ
2021-03-22 16:16:21
225
原创 Handler的原理(篇章一)
Android中主线程是不能进行耗时操作的,子线程是不能进行更新UI的。所以就有了handler,它的作用就是实现线程之间的通信。handler整个流程中,主要有四个对象,handler,Message,MessageQueue,Looper。当应用创建的时候,就会在主线程中创建handler对象,我们通过要传送的消息保存到Message中,handler通过调用sendMessage方法将Message发送到MessageQueue中,Looper对象就会不断的调用loop()方法不断的从MessageQ
2021-03-22 16:00:49
64
原创 Netty教程-Channel
Channel五大基本特性:1)通道状态主要包括:打开、关闭、连接2)通道主要的IO操作,读(read)、写(write)、连接(connect)、绑定(bind)。3)所有的IO操作都是异步的,调用诸如read,write方法后,并不保证IO操作完成,但会返回一个凭证,在IO操作成功,取消或失败后会记录在该凭证中。4)channel有父子关系,SocketChannel是通过Se...
2018-07-17 10:06:20
97
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人