2024年安卓最新Android IPC机制,2024年最新正在准备面试英文

要如何成为Android架构师?

搭建自己的知识框架,全面提升自己的技术体系,并且往底层源码方向深入钻研。
大多数技术人喜欢用思维脑图来构建自己的知识体系,一目了然。这里给大家分享一份大厂主流的Android架构师技术体系,可以用来搭建自己的知识框架,或者查漏补缺;

对应这份技术大纲,我也整理了一套Android高级架构师完整系列的视频教程,主要针对3-5年Android开发经验以上,需要往高级架构师层次学习提升的同学,希望能帮你突破瓶颈,跳槽进大厂;

最后我必须强调几点:

1.搭建知识框架可不是说你整理好要学习的知识顺序,然后看一遍理解了能复制粘贴就够了,大多都是需要你自己读懂源码和原理,能自己手写出来的。
2.学习的时候你一定要多看多练几遍,把知识才吃透,还要记笔记,这些很重要! 最后你达到什么水平取决你消化了多少知识
3.最终你的知识框架应该是一个完善的,兼顾广度和深度的技术体系。然后经过多次项目实战积累经验,你才能达到高级架构师的层次。

你只需要按照在这个大的框架去填充自己,年薪40W一定不是终点,技术无止境

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 套接字

  • 使用场景

  • 某些模块由于特殊原因需要运行在单独的进程里

  • 加大一个应用可使用的内存

  • 向其他应用获取数据

  • 开启多进程模式

  • 在清单文件中指定: android:process

  • 在 native 层 fork(不常用)

  • 运行机制

  • 每个进程都分配了一个独立的虚拟机, 独立的地址空间, 所以导致不能共享内存

  • 常见问题

  • 1. 静态成员和单例模式完全失效

  • 2. 线程同步机制完全失效

  • 3. SharedPreferences 的可靠性下降

  • 4. Application 会多次创建

  • 序列化

  • Serializable

  • 一般需要手动指定 serialVersionUID, 比如 1L.

  • serialVersionUID 不指定, 系统会自动计算当前类的 hash 值, 序列化时和反序列化时如果 serialVersionUID 不一致会 crash. 如果指定了 serialVersionUID, 即使有新增或者删除字段, 任然能够序列化成功.

  • Parcelable

  • writeToParcel() 序列化, 反序列化由 CREATOR 完成, 内容描述由 describeContents() 完成

  • 两者之间的比较

  • Serializable 是 Java 中的序列化接口, 使用简单, 开销很大. 序列化和反序列化需要大量 I/O 操作. Parcelable 效率很高.

  • 序列化到存储设备或者对象序列化后通过网络传输, 建议选择 Serializable

  • Parcelable 主要用在内存序列化上

  • Binder

  • 可以使用 AIDL(系统提供的快速实现 Binder 的工具) 自动生成代码, 也可以自己写

  • Android 中 IPC 方式

  • Bundle(使用 Intent 中附加的 extras)

  • 非常简单, 方便

  • 使用场景: 直接传递数据

  • 共享文件

  • 简单方便

  • 对象记得序列化

  • 不建议使用 SP 进行进程间通信, 虽然它也是文件, 但是它内存有一定的缓存策略, 内存中有一份 SP 文件的缓存.

  • 使用场景: 由于并发读写存在问题, 适合对数据同步要求不高的进程之间通信

  • Messenger

  • 其实底层是通过 AIDL 实现的, 也就是通过 Binder 来通信的

  • 数据传递必须将数据放入 Message 中

  • 串行方式处理, 一个一个地来

  • AIDL

  • 服务端

  • 首先创建一个 Service, 用来监听客户端的连接请求, 然后创建一个 AIDL 文件, 将暴露给客户端的接口在这个 AIDL 文件中声明, 最后在 Service 中实现这个 AIDL 接口即可

  • 客户端注册的 listener(RemoteCallbackList, 底层是 map,key 是 binder), 服务端调用 listener 中的方法, 这个方法是运行在客户端的 binder 线程中, 可能很耗时, 所以不能在 UI 线程搞

  • 客户端

  • 首先需要绑定服务端的 Service, 绑定成功后, 将服务端返回的 Binder 对象转成 AIDL 接口所属的类型, 接着就可以调用 AIDL 中的方法了.

  • 调用服务端的方法时, 运行在服务端的 binder 线程池中, 不能在 UI 线程调用

  • 客户端与服务端之间传递的对象不是引用, 而是序列化和反序列化了的

  • ContentProvider

ContentProvider 是 Android 中提供的专门用于不同应用间进行数据共享的方式, 天生适合进程间通信. 底层是 Binder

  • android:authorities 唯一标识

  • onCreate()在主线程中运行, 其他 () 都在 binder 线程中运行

  • 通过 Uri 来区分外面要访问的数据集合, 需要定义单独 Uri 和 Uri_Code, 使用 U 日 Match 而的 addURI() 方法将 Uri 和 Uri_Code 关联到一起

  • update,insert,delete 方法会引起数据源的改变, 这时候需要调用 ContentResolver 的 notifyChange 方法来通知外界当前 ContentProvider 中的数据已经发生改变

  • 观察 ContentProvider 中的数据改变情况, 可以通过 ContentProvider 的 registerContentObserver() 方法来注册观察者, unregisterContentObserver 方法来解除观察者

  • Socket(网络通信肯定是可以的撒)

  • 底层实现分类

  • TCP

  • 稳定

  • 超时重传

  • 三次握手, 四次挥手

  • UDP

  • 无连接

  • 不太可靠, 只保证发出去, 不保证正确传输

  • 效率高

  • 连接上了之后可以互相通信, 不像 Http(是 APP 主动通信, 然后服务端返回).

总结

【Android 详细知识点思维脑图(技能树)】

image

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

正的技术提升。**

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值