开新版本啦,老版本写的内容太多了,我自己找起来都麻烦了,遂决定像代码一样,文章臃肿了就要抽象封装了,相近内容程提炼成一篇汇总性的文章,然后我们再加点设计模式上来,提供一个单例的全局入口,方便使用定位。程序员最好把程序思维带到生活里来,这样有助于我们消化提炼程序思维
android 多线程 — 学习目录
手淘App - Atlas
微信 - Mars
阿里、腾讯、小米三个生态的分析
架构
架构方面的资料很多,这个结合设计模式提了各种开源库:Android进阶之旅-系统架构
老版本
Android 的点太多了,大的、小的,新的、旧的,总是目不暇接,总结整理下也好自己查好。话说自己写的文章过百了,也不怎么好找了,哈哈,虽然写的不咋地,没人看......
里面有不少半成品,开了好多坑都没天上,大家见谅......
常用占坑:
- 个人常用开源库
日常大图鞭策自己,还有如此多的内容呢
- 前言:Android进阶汇总(持续更新)
content 启动特性图:
- 数字1:启动Activity在这些类中是可以的,但是需要创建一个新的task,一般情况不推荐;
- 数字2:在这些类中去layout inflate是合法的,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用;
- 数字3:在Receiver为null时允许,在4.2或以上的版本中,用于获取黏性广播的当前值
java 基础
-
杂七杂八的:
- java 的 import static
- Lambda表达式以及AS 对其的支持
- 常用的转义字符
- 学习中使用泛型的一些体会
-
设计模式:
- 设计模式资料积累
-
多线程:
- android 多线程 — 综述
- android 多线程 — java 内存模型
- android 多线程 — GC
- android 多线程 — Thread
- android 多线程 —上下文切换
- android 多线程 — 同步
- android 多线程 — reentrantLock 重入锁
- android 多线程 — 并发集合 CopyOnWriteArrayList、ConcurrentHashMap
- android 多线程 — handle 学习
- android 多线程 — HandlerThread
- android 多线程 — IntentService
- android 多线程 — AsyncTask 使用
- android 多线程 — AsyncTask 源码简单分析
- android 多线程 — 线程的面试题和答案
Kotlin
原来这里有一大堆话,但是写的有点多,提出来写了一篇
* kotlin - 概述
* kotlin - 基础语法
* kotlin - 函数(对象函数/代码补全)
* kotlin - 高级特性
* kotlin - Coroutine 协程
* kotlin - 代码片段
Android 基础
Android 的小块的知识点是太多,太复杂了,平时必须多加记录,整理才能玩的转 Android ,要不有时你会不自然的萌逼一下的,哇哈哈哈....我就长长这样,狗屎吃过了,自然知道改了。
扫盲篇都是一些基础的生僻知识点:
- Android 扫盲 - 常用abd命令
- Android 扫盲 - MAC 上的各种配置
- Android 扫盲 - 多语言适配
- Android 扫盲 - android设备 id
- Android 扫盲 - 软键盘交互
- Android 扫盲 - android 字符串格式化
- Android 扫盲 - action
- Android 扫盲 - shape
- Android 扫盲 - LayoutInflater
- Android 扫盲 - Theme 主题
- Android 扫盲 - 5.0 蛋疼的阴影
- support兼容包:从v4、v7、v13、v17到androidX
梳理篇:
有的点实在太讨厌,零零碎碎的点总是很多,一次又学不完,搞不清所有,只能靠水磨工夫去学个圆满
- android webview 梳理
- android 状态栏梳理
- 底部导航思路
- 首页管理 Fragment 方式
Activity:
Activity 是我们接触最多的了,下面这篇对 Activity 声明周期变化,launchMode,configChanges ,传参都有比较好的解释
- Activity你应该知道的一切
关于 ActivityTask 栈,建议大家去看《android 开发艺术探索》,这里面介绍的最正确
Android 疑难杂症处理
android 开发中总是会碰到一些很难解决的疑难杂症,很顽强,很难根治,大多数时候迪欧不知道为什么。
- android static 变量丢失的处理
- android 怪异异常汇总
- android 中的疑难杂症
- 记录android开发中琐碎的点
- android 几种杀进程的方式
Android Framework
Android 框架层很难看,尤其是系统逻辑晦涩难懂,但是面试,笔试时肯定会碰到,尤其像 launch Activity ,activty 显示流程是必会的,涉及到 AMS,WMS,双向AIDL通讯,window,windowManage,viewRootImpl,N多复杂的过程
推荐大家看 CSDN:kc专栏 的文章,里面涉及很多内容,需要的一般都有,尤其是 android 显示 Surface 这块,分析的很深入,值得学习
- app 启动流程
- Activity 显示流程
- 简述一下Android系统的架构
- android 进程相关
Android 进阶篇
-
屏幕适配
屏幕适配在 18年 10 头条公布自己的适配方案后,一时又是火热,自身大牛们纷纷跟着起哄,引的我们有趣学习一波,下面是我的学习心得,第一篇早期文章:- android 适配笔记
- 屏幕适配 - 再次总结
- 屏幕适配 - pt 思路
-
组件间通信
这里有一篇文章挺全的,基本思路都在,虽说不是我写的- 一文详尽 Android 通信:四大组件之间 & 进程间 & 线程间 & 多个App间
-
综合技术文章
这类文章里面有大量的各类技术文章,一般质量都是上乘的,但是不好分类啊,我就放这里得了- 100篇精选干货,感谢你与码个蛋共同成长
- 红橙Darren _ Android进阶之旅与你同行
- 自定义 view
- 自定义 view - 开篇
- 自定义 view - 前置知识点
- 自定义 view - 数学公式
- 自定义 view - 自定义属性
- 自定义 view - 布局 onLayout
- 自定义 view - 测量 onMeasure
- 自定义 view - 3大核心方法补充
- 自定义 view - canvas
- 自定义 view - paint
- 自定义 view - 绘制文字
- 自定义 view 练手 1- 自定义可换行的 textview
- 自定义 view 练手 2- 自定义 flexbox-layout
- 自定义 view 练手 3- 自定义 ratingBar
-
事件分发,滑动冲突
- android 事件分发原理
- android 滑动冲突
- android 滑动拓展使用
-
权限
- android 6.0动态权限
- AndPermission 集成使用
- RxPermission 集成使用
- 简单对权限开源库进行功能性封装
-
server 、ALDL
- AIDL 入门
- service服务知识点总结
-
广播
- 使用代码动态注册广播接收器
-
混合开发
- 混合开发思路梳理
-
Flutter
- Flutter - 学习总览
- Flutter - 特性
我的开源库
在组件化,平台化的今天,我们被要求同一个功能可以在多个 app 项目中复用,这就要求我们必须对功能进行框架级别的封装,也就是把 app 中的一个个包 变成一个活多个 module 组件。这立马就要求开发人员要有至少水平线的代码封装,框架封装能力,封装封装,这真不是说说的,真的是一下子对 android 开发的功底要求就高了起来了,没有相关经验基础的同学真的会无所适从啊,我是深有体会啊,这里分享下自己封装的一些简单的功能组件,算是给大家提供一个思路吧,因为我知道我自己也是个半拉子水平
随着时间的推移,我找到了一些管理如何开发第三方库的指导,都是别人思虑很久后形成的文字,很值得大家没事去看看
- 开发指导
- 开发第三方库最佳实践
- Android 多状态加载布局的开发 Tips
-
applicappation 组件
- 简单的 applicappation 通用组件
-
权限组件
- 简单对权限开源库进行功能性封装
-
RxBus 库
- 我学 rxjava 2(5)- RxBus
UI
Android 的 UI 可不仅仅是狭隘的控件,布局,更是涉及到产品设计的思想,app 开发人员为啥不能去了解产品设计,UI 设计,这些了解了才能优雅,恰当的和 UI 猫,产品汪去沟通,鄙视这些小动物,要不你都不知道怎去喷...........看我的怨念......
-
UI 设计方向
- 从 Android 开发看 UI 设计
原子设计模式,这基本可是 UI 界的通行标准了,但是在 app 界还是太多的 UI 设计不懂了,我们了解之后才好去和 UI 喷。 - 开发人员的看的产品设计/运营
- 从 Android 开发看 UI 设计
-
图片
-
在学习图片之前,我们要先了解一下图片储存的位置:
- 在Android3.0之前,Bitmap对象放在java堆中,具体的像素数据放在Native中,这样做OOM的几率小了,但在图片回收的时候,不一定能及时释放Native内存中的图片像素数据
- 于是在Android3.0~Android7.0期间,将Bitmap 对象和像素数据统一放到 Java 堆中.这样做资源是能及时回收了,但是OOM的问题又出现了
- Android8.0系统又觉得将Bitmap像素数据放回到Native中,只是这时多了一个NativeAllocationRegistry来帮助Native内存的回收
NativeAllocationRegistry 是 Android 8.0引入的一种辅助自动回收native内存的一种机制,当Java对象因为GC被回收后,NativeAllocationRegistry可以辅助回收Java对象所申请的native内存
android:largeHeap="true" 申请大内存
bitmap 操作
android图片系列 (2) - 静态 SVG 图片
android图片系列 (3) - imageview的尺寸与图片内存占用的关系
android图片系列 (4) - SVG动画(动态SVG 图片)
android图片系列 (5) - SVG 补充资料
android图片系列 (6) - 使用png图片内存变化探讨
android图片系列 (7) - png 转webp
-
-
动画
- android 动画系列 - 目录
- android 动画系列 (1) - tween 动画(view动画)
- android 动画系列 (2) - interpolator 插值器
- android 动画系列 (3) - layoutAnimation 视图动画
- android 动画系列 (4) - PropertyAnimation 属性动画
- android 动画系列 (5) - ripple 波纹动画
- android 动画系列 (6) - 转场动画
- android微动效
-
Behavior
- android ui 学习系列 - 安卓自带Behavior的使用
- android ui 学习系列 -自定义Behavior (1) - 相关原理
- android ui 学习系列 -自定义Behavior (2) - 仿知乎页面
- android ui 学习系列 -自定义Behavior (3) - 仿开眼页面
- Android开发之CoordinatorLayout打造滑动越界弹性放大图片效果
-
layout 布局
- Android 布局优化理论
- Android 布局小技巧汇总
- android ui 学习系列 - 初识 CoordinatorLayout
- android ui 学习系列 - ConstraintLayout 约束布局
- android高级页面效果集锦
- Android 这才是实现防抖动(防快速点击)的最优雅写法
-
ViewPager
- ViewPager学习(1) - transformer 页面切换
recycleView
SnapHelper 有两个实现: LinearSnapHelper , PagerSnapHelper。区别是 LinearSnapHelper 一次可以滑多个 item ,PagerSnapHelper 一次只能滑一个 item
LinearLayoutManager manager = new LinearLayoutManager(getContext());
manager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(manager);
LinearSnapHelper snapHelper = new LinearSnapHelper();
snapHelper.attachToRecyclerView(mRecyclerView);
- 我的recycleView技术大全
- RecyclerView — 滚动基础
- RecyclerView — BaseAdapter、BaseViewHolder
- item动画效果
- LayoutAnimation 动画
- RecyclerView — DiffUtil
- RecyclerView — ItemDecoration
- Textview
textview 我们虽然用起来很简单,有很多有太多变种应用了,这里正确一一列举出来,里面涉及到大量的自定义 view,canvas 绘制,动画内容,但是每个部分难度不是太大,特别适合入门学习- 特别推荐一个库:SuperTextView
对 textview 封非常好的一个库,尤其是其包含 shape 功能,可以让我们省下定义大量 shape xml 文件的苦楚,大家看一个图片就知这个库有多厉害了,非常值得去看的
- textview - drawableXXX 设置大小
- textview - SpannableString 文本的花式玩法
- textview - SpannableString 小工具
- textview - 翻转动画
- textview - 点击阴影缩放动画
- textview - 仿支付宝微信支付密码输入控件
- 特别推荐一个库:SuperTextView
开源库
-
图片加载库
- android 图片加载库(1)- 各开源库对比
- android 图片加载库(2)- Glide
- android 图片加载库(3)- Glide 加载圆形图片
- android 图片加载库(4)- Fresco
- android 图片加载库(5)- 图片加载库如何封装
-
Rxjava
- 我学 rxjava - 目录
- 我学 rxjava 2(1)- 简单上手
- 我学 rxjava 2(2)- 操作符
- 我学 rxjava 2(3)- 热发射
- 我学 rxjava 2(4)- subscribeOn/observeOn 切换的是谁的线程
- 我学 rxjava 2(5)- RxBus
- 网络,异步相关库
- RestFul Api 定义流程规范
- retrofit 学习笔记
- 封装 retrofit 网络请求工具
- DataBinding
- DataBinding 的简单使用
- 音视频开发
- Vitamio 播放器
Vitamio 支持 RTMP/RTSP/FLV/HLS(m3u8)/MMS
RTMP 是早期 flash 的,RTSP 系统自带的 VideoView 就能支持,HLS 是基于 http/https 的,MMS 适用于电台,网络广播
Vitamio.initialize(this)
mVideoView = (VideoView) findViewById(R.id.vitamio_videoView);
path = "rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov";
mVideoView.setVideoPath(path);
mVideoView.setMediaController(new MediaController(this));
mVideoView.requestFocus();
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.setPlaybackSpeed(1.0f);
}
});
- 玩转Android之在线视频播放控件Vitamio的使用
- 饺子播放器
- 一个强悍而优美的Android视频播放器
- 视频开发 (1)- 饺子播放器
- 音频录制
- AudioRecord 录制详解
这篇文章非常详细的讲解了音频录制和播放的内容,非常值得学习
app 架构
Android 的架构不是一成不变的,发展也是很快的。最近出了很多架构思想,无论是最初的MVC, 还是近几年风头极盛的MVP, Google推出的MVVM,还是系统层面的组件化,模块化,插件化;最终遵循的架构原则无非就是三点:
- 横向划分模块
- 纵向划分层次
- 解耦通信
代码架构最终实现目的是什么?
- 解耦
- 复用
- 可读性
- 健壮性
- 提高并行开发效率
移动架构分广义和狭义,光以上讲是划分子系统,狭义上讲是代码分层。
所谓架构,无非两个方面: 分层和通信方式。
想对架构有个总体了解,推荐大家看 DevCW 写的这 3 篇文章:
- 关于Android架构,有这一篇就够了(干货总结)
- 移动架构这么多,如何一次搞定所有
- 模块化,组件化傻傻分不清?附带组件化福利
- 组件是如何通信的?揭秘ARouter路由机制
- mvp 和 mvvm 基础请看下面:
- Android 架构设计:MVC、MVP、MVVM和组件化
- 从MVP架构设计引发的一些思考
大家对于 clean 架构可能不是很清晰,大家看这里,这里有比较详细的 mvc.mvp.clean.aac 对比
- Android四大架构的优缺点
-
app 架构
- Android Architecture Components 开发架构
基于数据流的响应式架构
- Android Architecture Components 开发架构
-
从 MVP学习代码封装系列
- 从 MVP学习代码封装 (1) - 综述
- 从 MVP学习代码封装 (2) - 搭建 MVP 最基础框架
- 从 MVP学习代码封装 (3) - 抽象 V 层生命周期模板
- 从 MVP学习代码封装 (4) - 给 MVP 添加 stateView状态页功能
-
android 开发规范系列
- android 开发规范
- android 开发规范 (1) - 工程 / 项目
- android 开发规范 (2) - 类
- android 开发规范 (3) - 属性
- android 开发规范 (4) - 方法
- android 开发规范 (5) - android 资源
- android 开发规范 (6) - 其他及附录
新姿势来啦 - Android App Bundle
优化
Android 的优化的点很多的,UI,架构,框架性能,持续集成能力,平台化能力,是否易于修改,是否易于扩展....所以做好 Android 的优化,我们首先要了解很多偏底层的知识点,这些知识点也是很零碎的
优化的前提至少我们得知道 android 是怎么显示的不是,CPU 把 UI 组件计算成 Polygons 多边形 和 Texture 纹理,然后交给 GPU 进行栅格化渲染
- 界面渲染原理浅析
- APP 优化 - app 启动优化
- APP 优化 - activity 启动优化
- 视图和布局优化
-
须知知识点
- Android 内存知识点,优化,bitmap 缓存
-
性能分析工具
- android性能跟踪分析工具系列 - 目录
- android性能跟踪分析工具系列 - 各种理论简介
- android性能跟踪分析工具系列 - GPU 呈现模式分析
- android性能跟踪分析工具系列 - Hierarchy Viewer
- android性能跟踪分析工具系列 - systrace
- android性能跟踪分析工具系列 - TraceView
- android性能跟踪分析工具系列 - Memory monitor - jump java heap
- android性能跟踪分析工具系列 - LeakCanary
- android性能跟踪分析工具系列 - blockcanary - 1
- android性能跟踪分析工具系列 - blockcanary - 2
- android性能跟踪分析工具系列 - StallBuster
持续集成 、 组件化,平台化
16年时的插件化,组件化,热修复是多火,很多人其实对其发展历史不是很了解,有兴趣的朋友看这篇,大牛写的
- 移动开发的罗曼蒂克消亡史 | InfoQ
这篇文章是从前端角度来说的,我喜欢期中的思想,这是阿里的分享,包括 Code Review ,状态(包含数据和变化)这个词, 还有 CR 的思路,流程,内部间 CR 的协作,组织,很赞
- 同样做前端,为何差距越来越大?
- 组件化
- 谈谈我的理解-组件化/模块化
- 记 router 选型和组件化思考
- android的组件化和插件化开发
- 关于组件化开发使用 gradle统一配置版本,依赖
- 管理我们的 gradle 依赖
-
AS 工具
- Android 寻找极限编码的快感
- 开发小工具合集
- 熟悉,使用 Android Studio 工具
- gradle 系列 - 目录
- gradle 系列 (1) - 基础知识
- 修改 gradle 文件卡顿
- Kotlin 里面如何配置 DataBinding
- 关于AS 自动更新 gradle 文件出现问题
- 使用AS - Live Template 添加代码模板
- 使用AS - File Template 添加class模板
- Android studio XML布局不能格式化
- 值得一试的Android开发工具一「网络请求专场」
- 值得一试的Android开发工具二「AndroidStudio插件专场」
- 值得一试的Android开发工具三「笔记类专场」
- Android Studio - 有意思的快捷键
- Android Studio - Postfix Completion 代码补全
通用技术和开发工具支持
- Markdown常用语法
- git 使用注意点
- UML工具
- UML类图学习
- Android gif 制作
资源
- Google IO 2018 小计
- 2017北京GDG观后感 - 附视频资源
- android练手项目集锦
- 设计资源
- android大神们的博客,网站还有各种优质资源
- 大厂的 android app 进化之路及各种优化,瘦身
感悟
Android 学习,工作的过程中总是有很多感受,感悟,甚至是恍然大悟,这些瞬间的感觉总是一闪而逝,保存不久,无法记忆,所以我希望用文字尽量多的保留那份感悟,以待之后可以常悟常新。还有很多别人的感悟,经验,这些放在一起。
android 学习之我思
自省警句
属于程序员的人生思考/励志
这里有你需要的各种老鸟经验和心声,更有鸡汤
android开发新人心态不要有
-
周盘:
- 周盘必读 - 北上广的你,远离诗和远方
-
涨 IQ :
- IQ 硬伤如何学
面试
- 面试资料准备
- 新智认为面试
- 为跳槽的你献计献策(Android)
简历模板不错 - qing的世界的面试算法,有4篇,讲的比较深了
- Android(2017-2018)BAT面试题整理(java篇,含答案)
第三方集成经验
- 招行一网通集成
- android推送选型和混合设计
- 记一个小米推送的坑
- 记录我第一次网站备案
android 中处理 carsh 使用 Thread.UncaughtExceptionHandler 来截获错误并进行自己的逻辑处理
public class CrashHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
//回调函数,处理异常出现后的情况
}
}
我们在里面可以重启 app 或是打印错误信息到本地,详细:
- android 异常捕获-UncaughtExceptionHandler