学习福利
【Android 详细知识点思维脑图(技能树)】
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
DataBinding 简单来说它是一个数据绑定框架,可以帮你把数据(M)和视图(V)绑定起来,当数据改变时,视图自动更改,当视图被改变时,数据也会相应更改。原理简单来说其实就是通过工具帮你把绑定生成对应的代码,而且生命周期安全,不会内存泄露。
可能 AS 会有提示一些奇奇怪怪的错误,如果是可以正常运行的那种错误提示,可无需理会,比如 BR 类报红色,xml 中的红色提示等,不过也不多,别一提示错误就被吓跑了。
1、MVVMArchitecture 框架对 DataBinding 的封装
框架地址:MVVMArchitecture。
首先你的 Activity 必须继承自框架的 DataBindingBaseActivity,告知框架对应的 layout 文件和 ViewModel 类,如下:
class MainActivity : DataBindingBaseActivity<ActivityMainBinding, MainViewModel>(
R.layout.activity_main, BR.viewModel
) {
override fun initParam() {
}
override fun initViewObservable() {
}
override fun initData() {
super.initData()
}
}
对应的 MainViewModel 如下:
class MainViewModel(app: Application) : BaseViewModel(app) {
}
对应的 xml 如下:
<layout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:app=“http://schemas.android.com/apk/res-auto”
xmlns:tools=“http://schemas.android.com/tools”
<LinearLayout
android:id=“@+id/linear”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:orientation=“vertical”
tools:context=“.MainActivity”
使用 layout 标签包裹后,会自动生成 ActivityMainBinding 类,在 xml 中使用 variable 标签声明了 viewModel 变量后,会自动生成 BR.viewModel,于是,一个 Activity 就搭建完成了。
框架会自动让你的 Activity 拥有两个变量:mBinding,mViewModel,对应 R.layout.activity_main 生成的 ActivityMainBinding 和 MainViewModel。并且让 xml 的 viewModel 也是 MainViewModel 的实例变量。
根据 Id,mBinding 会自动生成 linear 变量,无需再 findViewById 了。注意:如果你只是想解决 findViewById,而不想使用 DataBinding,可继承自 ViewBindingBaseActivity,并开启视图绑定即可。
关联如下:
[图片上传失败…(image-52e99f-1603874806078)]
这样你的 xml 就和 ViewModel 类绑定起来了,xml 就是你的界面,在界面中的操作,可以通过 viewModel 变量流向 ViewModel 类,ViewModel 中的数据要显示在界面上,可以通过 LiveData 或 ObservableXxxx。
可能你的 VM 不止一个 MainViewModel,那么就需要自己手动增加了,如下:
class MainActivity : DataBindingBaseActivity<ActivityMainBinding, MainViewModel>(
R.layout.activity_main, BR.viewModel
) {
// 除了主 vm,还可以有其他的 vm,来自 fragment-ktx 的 viewModels 扩展,可快速一行代码创建实例
private val mTestViewModel by viewModels()
override fun initData() {
super.initData()
// 关联
mBinding.setVariable(BR.testViewModel, mTestViewModel)
// 或者是这样:
// mBinding.testViewModel = mTestViewModel
}
}
xml 如下:
<layout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:app=“http://schemas.android.com/apk/res-auto”
xmlns:tools=“http://schemas.android.com/tools”
…
上面已经将 V 和 VM 结合起来了,为啥叫 MVVM 框架呢?因为 M 是 Model 数据层,V 是 View 视图层,VM 是 ViewModel 业务逻辑层。
2、没有 DataBinding 前的世界
在没有 DataBinding 前,也许你的代码是这样的,我们举个例子:执行一个耗时操作后将结果显示在界面上。
<?xml version="1.0" encoding="utf-8"?><LinearLayout
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:orientation=“vertical”
tools:context=“.MainActivity”
因为没有使用 DataBinding,我们就开启 ViewBinding 并继承自 ViewBindingBaseActivity,如何开启 ViewBinding 请自行搜索。
class MainActivity : ViewBindingBaseActivity<ActivityMainBinding, MainViewModel>() {
override fun initViewObservable() {
// 监听 LiveData
mViewModel.mMutableLiveData.observe(this, Observer {
mBinding.tvMsg.text = it
})
}
override fun initData() {
super.initData()
// 开始加载数据
mViewModel.loadData()
}
// 必须复写此方法提供 Binding 实例
override fun initBinding(inflater: LayoutInflater, container: ViewGroup?) =
ActivityMainBinding.inflate(inflater)
}
class MainViewModel(app: Application) : BaseViewModel(app) {
val mMutableLiveData = MutableLiveData()
fun loadData() {
// 显示加载中对话框
最后说一下我的学习路线
其实很简单就下面这张图,含概了Android所有需要学的知识点,一共8大板块:
- 架构师筑基必备技能
- Android框架体系架构(高级UI+FrameWork源码)
- 360°Androidapp全方位性能调优
- 设计思想解读开源框架
- NDK模块开发
- 移动架构师专题项目实战环节
- 移动架构师不可不学习微信小程序
- 混合开发的flutter
Android学习的资料
我呢,把上面八大板块的分支都系统的做了一份学习系统的资料和视频,大概就下面这些,我就不全部写出来了,不然太长了影响大家的阅读。
330页PDF Android学习核心笔记(内含上面8大板块)
Android学习的系统对应视频
总结
我希望通过我自己的学习方法来帮助大家去提升技术:
-
1、多看书、看源码和做项目,平时多种总结
-
2、不能停留在一些基本api的使用上,应该往更深层次的方向去研究,比如activity、view的内部运行机制,比如Android内存优化,比如aidl,比如JNI等,并不仅仅停留在会用,而要通过阅读源码,理解其实现原理
-
3、同时对架构是有一定要求的,架构是抽象的,但是设计模式是具体的,所以一定要加强下设计模式的学习
-
4、android的方向也很多,高级UI,移动架构师,数据结构与算法和音视频FFMpeg解码,如果你对其中一项比较感兴趣,就大胆的进阶吧!
希望大家多多点赞,转发,评论加关注,你们的支持就是我继续下去的动力!加油!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
!加油!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!