2020新一波跳槽季过后,Android程序员精选,大厂,移动智能终端开发技术

消息队列在 android 中对应 MessageQueue 这个类,顾名思义,消息队列中存放了大量的消 息(Message)

2.什么是消息

消息(Message)代表一个行为(what)或者一串动作(Runnable),有两处会用到 Message: Handler 和 Messenger

3.什么是 Handler 和 Messenger

Handler 大家都知道,主要用来在线程中发消息通知 ui 线程更新 ui。Messenger 可以翻译为 信使,可以实现进程间通信(IPC),Messenger 采用一个单线程来处理所有的消息,而且进 程间的通信都是通过发消息来完成的,感觉不能像 AIDL 那样直接调用对方的接口方法(具 体有待考证),这是其和 AIDL 的主要区别,也就是说 Messenger 无法处理多线程,所有的 调 用 都 是 在 一 个 线 程 中 串 行 执 行 的 。 Messenger 的 典 型 代 码 是 这 样 的 : new Messenger(service).send(msg),它的本质还是调用了 Handler 的 sendMessage 方法

4.什么是 Looper

Looper 是循环的意思,它负责从消息队列中循环的取出消息然后把消息交给目标处理

5.线程有没有 Looper 有什么区别?

线程如果没有 Looper,就没有消息队列,就无法处理消息,线程内部就无法使用 Handler。 这就是为什么在子线程内部创建 Handler 会报错:“Can’t create handler inside thread that has not called Looper.prepare()”,具体原因下面再分析。

6.如何让线程有 Looper 从而正常使用 Handler?

在线程的 run 方法中加入如下两句:
Looper.prepare();
Looper.loop();

这一切不用我们来做,有现成的,HandlerThread 就是带有 Looper 的线程。

想 用 线 程 的 Looper 来 创 建 Handler , 很 简 单 , Handler handler = new Handler(thread.getLooper()),有了上面这几步,你就可以在子线程中创建 Handler 了,好吧, 其实 android 早就为我们想到这一点了,也不用自己写,IntentService 把我们该做的都做了, 我们只要用就好了,具体怎么用后面再说。

消息队列和 Looper 的工作机制

一个 Handler 会有一个 Looper,一个 Looper 会有一个消息队列,Looper 的作用就是循环的 遍历消息队列,如果有新消息,就把新消息交给它的目标处理。每当我们用 Handler 来发送 消息,消息就会被放入消息队列中,然后 Looper 就会取出消息发送给它的目标 target。一般 情况,一个消息的 target 是发送这个消息的 Handler,这么一来,Looper 就会把消息交给 Handler 处理,这个时候 Handler 的 dispatchMessage 方法就会被调用,一般情况最终会调用 Handler 的 handleMessage 来处理消息,用 handleMessage 来处理消息是我们常用的方式。

**源码分

析**

final Callback mCallback;

而 mCallback 是个接口,可以这样来设置 Handler handler = new Handler(callback),这个 callback 的意义是什么呢,代码里面的注释已经说了,可以让你不用创建 Handler 的子类但 是还能照样处理消息,恐怕大家常用的方式都是新 new 一个 Handler 然后 override 其 handleMessage 方法来处理消息吧,从现在开始,我们知道,不创建 Handler 的子类也可以 处理消息。多说一句,为什么创建 Handler 的子类不好?这是因为,类也是占空间的,一个 应用 class 太多,其占用空间会变大,也就是应用会更耗内存。



如何避免这种错误:在 ui 线程使用 Handler 或者给子线程加上 Looper。


3. Android 源码分析—带你认识不一样的 AsyncTask

前言

什么是 AsyncTask,相信搞过 android 开发的朋友们都不陌生。AsyncTask 内部封装了 Thread 和 Handler,可以让我们在后台进行计算并且把计算的结果及时更新到 UI 上,而这些正是 Thread+Handler 所做的事情,没错,AsyncTask 的作用就是简化 Thread+Handler,让我们能够 通过更少的代码来完成一样的功能,这里,我要说明的是:AsyncTask 只是简化 Thread+Handler 而不是替代,实际上它也替代不了。同时,AsyncTask 从最开始到现在已经经过了几次代码 修改,任务的执行逻辑慢慢地发生了改变,并不是大家所想象的那样:AsyncTask 是完全并 行执行的就像多个线程一样,其实不是的,所以用 AsyncTask 的时候还是要注意,下面会一 一说明。另外本文主要是分析 AsyncTask 的源代码以及使用时候的一些注意事项,如果你还 不熟悉 AsyncTask,请先阅读 android 之 AsyncTask 来了解其基本用法

这里先给出 AsyncTask 的一个例子:

由于篇幅问题,需要这份《2246页(小米,腾讯,百度,华为,阿里,字节)面试题详细解析》的可以点赞+评论666,简信我【面试】即可获得!



第一章 Android 相关


第二章 性能优


第三章 Java 相关


第四章 Kotlin 相关


第五章 网络相关


第六章 插件化&热修复&模块化&组件化 &增量更新&Gradle


第七章.图片相关


第八章 Flutter 相关

总结

最后

现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!

Android架构师之路很漫长,一起共勉吧!
对你更是如鱼得水!

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!

Android架构师之路很漫长,一起共勉吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值