Android 知识整理

开新版本啦,老版本写的内容太多了,我自己找起来都麻烦了,遂决定像代码一样,文章臃肿了就要抽象封装了,相近内容程提炼成一篇汇总性的文章,然后我们再加点设计模式上来,提供一个单例的全局入口,方便使用定位。程序员最好把程序思维带到生活里来,这样有助于我们消化提炼程序思维

  • android 多线程 — 学习目录

  • 手淘App - Atlas

  • 微信 - Mars

  • 阿里、腾讯、小米三个生态的分析

架构

架构方面的资料很多,这个结合设计模式提了各种开源库:Android进阶之旅-系统架构


老版本

Android 的点太多了,大的、小的,新的、旧的,总是目不暇接,总结整理下也好自己查好。话说自己写的文章过百了,也不怎么好找了,哈哈,虽然写的不咋地,没人看......

里面有不少半成品,开了好多坑都没天上,大家见谅......

常用占坑:

  • 个人常用开源库

日常大图鞭策自己,还有如此多的内容呢


  • 前言:Android进阶汇总(持续更新)

content 启动特性图:

Android 知识整理_第1张图片
  • 数字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 喷。
    • 开发人员的看的产品设计/运营
  • 图片

    • 在学习图片之前,我们要先了解一下图片储存的位置:

      • 在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 文件的苦楚,大家看一个图片就知这个库有多厉害了,非常值得去看的
      Android 知识整理_第2张图片
      image
    • textview - drawableXXX 设置大小
    • textview - SpannableString 文本的花式玩法
    • textview - SpannableString 小工具
    • textview - 翻转动画
    • textview - 点击阴影缩放动画
    • textview - 仿支付宝微信支付密码输入控件

开源库

  • 图片加载库

    • 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 的简单使用
  • 音视频开发
  1. 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的使用
  1. 饺子播放器
  • 一个强悍而优美的Android视频播放器
  • 视频开发 (1)- 饺子播放器
  1. 音频录制
  • AudioRecord 录制详解
    这篇文章非常详细的讲解了音频录制和播放的内容,非常值得学习

app 架构

Android 的架构不是一成不变的,发展也是很快的。最近出了很多架构思想,无论是最初的MVC, 还是近几年风头极盛的MVP, Google推出的MVVM,还是系统层面的组件化,模块化,插件化;最终遵循的架构原则无非就是三点:

  1. 横向划分模块
  2. 纵向划分层次
  3. 解耦通信

代码架构最终实现目的是什么?

  1. 解耦
  2. 复用
  3. 可读性
  4. 健壮性
  5. 提高并行开发效率

移动架构分广义和狭义,光以上讲是划分子系统,狭义上讲是代码分层。

所谓架构,无非两个方面: 分层和通信方式。

想对架构有个总体了解,推荐大家看 DevCW 写的这 3 篇文章:

  • 关于Android架构,有这一篇就够了(干货总结)
  • 移动架构这么多,如何一次搞定所有
  • 模块化,组件化傻傻分不清?附带组件化福利
  • 组件是如何通信的?揭秘ARouter路由机制
  • mvp 和 mvvm 基础请看下面:
    • Android 架构设计:MVC、MVP、MVVM和组件化
    • 从MVP架构设计引发的一些思考

大家对于 clean 架构可能不是很清晰,大家看这里,这里有比较详细的 mvc.mvp.clean.aac 对比

  • Android四大架构的优缺点
  • app 架构

    • 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

你可能感兴趣的:(Android 知识整理)