Android 技能树
基础知识
java基础
- lambda表达式
- 正则表达式
设计模式与架构
- 六大设计原则
- 23种设计模式
- 单例模式
- MVC
- MVP
- MVVM
数据结构
- Map实现
- 红黑树
面向对象
基础算法
开发环境
- Eclipse
- AndroidStudio
- Gradle语法
- implementation
- api
- Gradle语法
- JDK
- 自动化打包
- 多渠道打包
Android SDK
- 解决国内SDK无法下载问题
Android 模拟器
Activity
- 生命周期
- 启动模式
- 对话框形式的 Activity
- 状态保存与恢复
Service
- 生命周期
- 保活
- IntentService
- 与Activity通信
BroadcastReceiver
- 静态注册
- 动态注册
ContentProvider
- 保存并共享数据
- ContentResolver、ContentObserver
Fragment
- 生命周期
- 与 Activity 通信
- crash 之后多个 Fragment 重叠
- 无 UI 的Fragement
多线程
- 线程池
- 线程锁
- 线程安全
UI
Layout
- FrameLayout
- LinearLayout
- RelativeLayout
- TableLayout
- ConstraintLayout
- CoordinatorLayout
- AppBarLayout
- CollapsingToolbarLayout
- AppBarLayout嵌套CollapsingToolbarLayout实现布局联动等操作
- ViewStub
- include
- merge
- ...
- 布局优化
View
- widget
- TextView
- 设置文本跟随手指滑动
- 设置文本样式、文本超链接、点击
- 解析 HTML
- Button
- 设置按压涟漪效果动画,兼容老版本
- EditText
- RadioButton
- 自定义选中与未选中图表
- CheckBox
- 自定义选中与未选中图标
- Switch
- TabLayout
- TabLayout+ViewPager
- SearchView
- Toolbar+SearchView
- Toolbar
- 设置返回箭头、menu、文本颜色
- 沉浸式状态栏
- NestedScrollView
- FloatingActionButton
- TextInputLayout
- SwipeRefreshLayout
- Snackbar
- VideoView
- 播放网络资源与本地资源
- 缓存
- 全屏与非全品切换
- 横竖屏切换
- 自定义MediaController
- ToggleButton
- ImageButton
- ImageView
- 设置图片缩放模式
- ProgressBar
- 圆形与进度条形
- SeekBar
- Spinner
- WebView
- 加载本地网页,兼容 file 协议
- 加载速度优化
- 设置 Cookie 与清空 Cookie
- 内存泄漏
- 单独进程加载 WebView,多进程间通信
- JS安全调用
- PopupMenu
- PopupWindow
- BottomSheetDialog
- BottomSheetDialogFragment
- RemoteViews
- TextView
- Containers
- RadioGroup
- ListView
- 上拉加载下拉刷新
- 滑动时不加载数据
- RecyclerView
- 自定义 LayoutManger,实现瀑布流等
- 上拉加载下拉刷新
- 滑动时不加载数据
- GridView
- ViewPager
- ViewPager + Fragment 懒加载,设置缓存页面个数
- ExpandableListView
- ScrollView
- CardView
- Gallery
- ...
- Date&Time
- TextClock
- AnalogClock
- DatePicker
- TimePicker
- CalendarView
- SurfaceView
- SurfaceView 预览 Camera
- SurfaceView 播放视频
- SurfaceView 计算预览帧中的坐标
- 多个 SurfaceView 叠加时界面混乱
- TextureView
- 同 SurfaceView
Dialog
- 透明背景的 Dialog
Notification
Custom View
- layout
- measure
- draw
- 优化绘制速度
- 定义控件参数
- 配合 style 获取参数
- 枚举类型
- resource资源类型
- ...
- 事件拦截与分发
- 解决滑动冲突
- 看一些开源框架的源码来学习解决滑动冲突常用的技术
anim
- View Animation
- Tween Animation
- alpha
- scale
- translate
- rotate
- Interpolators
- Frame Animation
- animation-list
- Tween Animation
- Property Animation
- ValueAnimator
- ObjectAnimator
- AnimatorSet
- 弹性动画(手指离开屏幕后继续滑动)
- Layout 内部随手指滑动而变形
- ViewGroup 添加/删除子 View 时动画
- ListView/RecylerView 添加/删除 item 时动画
Resource
- assets
- AssetManager
- res
- anim
- animator
- color
- drawable
- interpolator
- layout
- 版本兼容
- menu
- raw
- values
- arrays
- attrs
- bools
- colors
- string
- styles
- 黑夜模式白天模式切换
- xml
OpenGL
- 兼容不同的屏幕
- ...
通信
线程间通信
- Handler
- EventBus
- BroadcastReceiver
- AsyncTask
进程间通信
- Binder
HTTP
- HTTP 协议
- 提交表单
- 普通GET请求
- HTTP header & body
- https
- volley
- okHttp
- retrofit
Socket
- 心跳包
- 网络状态变化重连
WebSocket
- 同 Socket
Bluetooth
- BLE
NFC
Headset
USB
数据持久化
Sqlite
- SQL语句
ContentProvider
File
- 文件压缩与解压
- Internal Storage
- External Storage
- 7.0 之后使用 FileProvider 共享文件
- Serializable与Parcelable
SharedPreferences
性能
UI优化
- 自定义 View 时的 draw 方法优化
- 布局层次结构
- 抽象布局的使用
- 主线程耗时方法检测
- HierarchyViewer
- Lint工具
内存优化
- OOM
- 弱引用与软引用
- ANR
- ANR日志分析
- 分析
- Heap
- adb shell
- dumpsys meminfo
- showmap
- TraceView
- Dalvik 日志
- logcat
- MAT
电量优化
流量优化
适配
OS Version
- min SDK
Screen Size
Screen px
权限
调试
Logcat
adb
HierarchyViewer
TraceView
Heap
Lint
...
安全
通信安全
- 组件间通信
- 与服务器通信
数据加密
数据校验
代码混淆
WebView/JS 安全调用
MD5、DES、RSA、https、证书、权限
反编译与重新打包
手机功能
电话
- 联系人
- 通话记录
短/彩信
Camera
Audio
SD卡
传感器
- 加速
- 方向
- 重力
- 光线
- 磁场
- 距离
- 温度
- 压力
- 线性加速度
- 旋转
NDK
JNI
C/C++
so 与不同 CPU 架构的兼容
开源框架
volley
retrofit
okhttp
fastjson
glide
picasso
fresco
EventBus
butterknife
rxjava/rxandroid
PhotoView
dagger2
...
阅读部分开源框架源码
第三方SDK
地图
语音识别
人脸识别
支付
统计分析
广告
IM
测试
Mokey
MokeyRunner
JUnit
Mock
Robotium
Appium
Athrun(TMTS)
UIAutomator
其他
Intent
AndroidManifest
wifi
国际化
Bitmap
- 准确计算出 Bitmap 保存为文件后的大小
- Bitmap的四种属性
- Bitmap 加载大图优化
- Bitmap 原理
- Bitmap 压缩
网友评论