从IPC角度来说,Binder是Android中的一种跨进程通信方式;Binder还可以理解为虚拟的物理设备,它的设备驱动是/dev/binder;从
Android Framework
来讲,Binder是Service Manager
连接各种Manager
和对应的ManagerService
的桥梁。从面向对象和CS模型来讲,Client
通过Binder和远程的Server
进行通讯。
基于Binder,Android还实现了其他的IPC方式,比如AIDL
、Messenger
和ContentProvider
。
与其他IPC比较:
- 效率高:除了内存共享外,其他IPC都需要进行两次数据拷贝,而因为Binder使用内存映射的关系,仅需要一次数据拷贝。
- 安全性好:接收方可以从数据包中获取发送发的进程Id和用户Id,方便验证发送方的身份,其他IPC想要实验只能够主动存入,但是这有可能在发送的过程中被修改。
Binder的通信过程?Binder的原理?
图片:
其实这个过程也可以从AIDL生成的代码中看出。
原理:
Binder的结构:
Client
:服务的请求方。
Server
:服务的提供方。
Service Manager
:为Server
提供Binder
的注册服务,为Client
提供Binder
的查询服务,Server
、Client
和Service Manage
r的通讯都是通过Binder。
Binder驱动
:负责Binder通信机制的建立,提供一系列底层支持。
从上图中,Binder通信的过程是这样的:
- Server在Service Manager中注册:Server进程在创建的时候,也会创建对应的Binder实体,如果要提供服务给Client,就必须为Binder实体注册一个名字。
- Client通过Service Manager获取服务:Client知道服务中Binder实体的名字后,通过名字从Service Manager获取Binder实体的引用。
- Client使用服务与Server进行通信:Client通过调用Binder实体与Server进行通信。
更详细一点?
Binder通信的实质是利用内存映射,将用户进程的内存地址和内核的内存地址映射为同一块物理地址,也就是说他们使用的同一块物理空间,每次创建Binder的时候大概分配128的空间。数据进行传输的时候,从这个内存空间分配一点,用完了再释放即可。
2. 序列化
Android有哪些序列化方式?
为了解决Android中内存序列化速度过慢的问题,Android使用了Parcelable
。
对比 | Serializable | Parcelable |
---|---|---|
易用性 | 简单 | 不是很简单 |
效率 | 低 | 高 |
场景 | IO、网络和数据库 | 内存中 |
3. Framework
Zygote孕育进程过程?
Activity的启动过程?
建议阅读:
App的启动过程?
介绍一下App进程和System Server进程如何联系:
ActivityThread
:依赖于Ui线程,实际处理与AMS
中交互的工作。ActivityManagerService
:负责Activity
、Service
等的生命周期工作。ApplicationThread
:System Server
进程中ApplicatonThreadProxy
的服务端,帮助System Server
进程跟App进程交流。System Server
:Android核心的进程,掌管着Android系统中各种重要的服务。
具体过程:
- 用户点击App图标,
Lanuacher
进程通过Binder
联系到System Server
进程发起startActivity
。 System Server
通过Socket
联系到Zygote
,fork
出一个新的App进程。- 创建出一个新的App进程以后,
Zygote
启动App进程的ActivityThread#main()
方法。 - 在
ActivtiyThread
中,调用AMS
进行ApplicationThread
的绑定。 AMS
发送创建Application
的消息给ApplicationThread
,进而转交给ActivityThread
中的H
,它是一个Handler
,接着进行Application
的创建工作。AMS
以同样的方式创建Activity
,接着就是大家熟悉的创建Activity
的工作了。
Apk的安装过程?
建议阅读:
Activity启动过程跟Window的关系?
建议阅读:
Activity、Window、ViewRoot和DecorView之间的关系?
建议阅读:
4. Context
关于Context的理解?
建议阅读:
5. 断点续传
多线程断点续传?
基础知识:
- Http基础:在Http请求中,可以加入请求头
Range
,下载指定区间的文件数。 RandomAccessFile
:支持随机访问,可以从指定位置进行数据的读写。
有了这个基础以后,思路就清晰了:
- 通过
HttpUrlConnection
获取文件长度。 - 自己分配好线程进行制定区间的文件数据的下载。
- 获取到数据流以后,使用
RandomAccessFile
进行指定位置的读写。
6. 性能优化
平时做了哪些性能优化?
建议阅读:
7. 第三方库
一定要在熟练使用后再去查看原理。
Glide
Glide考察的频率挺高的,常见的问题有:
- Glide和其他图片加载框架的比较?
- 如何设计一个图片加载框架?
- Glide缓存实现机制?
- Glide如何处理生命周期?
- …
建议阅读:
OkHttp
OkHttp常见知识点:
- 责任链模式
interceptors
和networkInterceptors
的区别?
建议看一遍源码,过程并不复杂。
Retrofit
Retrofit常见问题:
- 设计模式和封层解耦的理念
- 动态代理
建议看一遍源码,过程并不复杂。
RxJava
RxJava难在各种操作符,我们了解一下大致的设计思想即可。
建议寻找一些RxJava的文章。
Android Jetpack(非必须)
我主要阅读了Android Jetpack中以下库的源码:
Lifecycle
:观察者模式,组件生命周期中发送事件。DataBinding
:核心就是利用LiveData或者Observablexxx实现的观察者模式,对16进制的状态位更新,之后根据这个状态位去更新对应的内容。LiveData
:观察者模式,事件的生产消费模型。ViewModel
:借用Activty异常销毁时存储隐藏Fragment的机制存储ViewModel,保证数据的生命周期尽可能的延长。Paging
:设计思想。
以后有时间再给大家做源码分析。
建议阅读:
8. 插件化和组件化
这个我基本没用过,等用过了,再和大家分享。
今天的分享就先到这里,下篇再讲Java基础,并发、JVM、kotlin、网络和设计模式这几块。
最后
经常听到一些同学调侃,Boss不聘、前程堪忧、拉不上钩,确实,今年的大环境比较严峻,但是一些高级岗位仍然稀缺。
谈一下我自己,小厂背景、毕业普通学校,所以,大厂都没给过面试机会,好在前两周内推成功了,我也抓住了这次机会,成功获得了大厂的Offer。
所以我想表达什么?**打铁还需自身硬,一定是得建立完比较完整的知识体系的前提下,当机会来临的时候,才能够稳稳地把握住,**希望和大家共勉~
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后
在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。**
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
[外链图片转存中…(img-67jyfblp-1710567198014)]
本文在开源项目:【GitHub 】中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…