高级Android程序员知识体系框架
本人曾放弃了Cisco的实习留用机会,从“千军万马过独木桥”般竞争激烈的校招中脱颖而出,最终在某知名互联网公司工作至今。在这一年的开发实战中,我深知自己备战校招时搭建的android知识体系框架有多宝贵,并很乐意分享给周围的人,希望能给你们带来帮助。
Colin_Mindset
你关注到了我,是个概率极低的事件......
展开
-
【Android 网络协议 二】HTTP协议
一、HTTP协议简介 1、协议 指计算机网络中两个计算机之间进行通信所必须遵守的规定或规则。 2、HTTP协议 是一种超文本传输协议。它允许将超文本标记语言(HTML)文档从Web服务端传送到客户端浏览器。 3、URI a. URI的全称是uniform resource identifier,是统一资源标识符,用来唯一标识一个资源。就是说,Web上有很多种资源...原创 2018-02-14 16:48:00 · 453 阅读 · 0 评论 -
【网络协议】HTTPS协议
首先讲解一下这篇文字的背景。你看到的这篇文章其实已经写了很久了,不过在最近进行了一次大的改版。因为作者之前写这篇文字的时候并没有完全掌握https协议的精髓,只是记录下了https协议的一些知识点,虽然这期间作者也陆续增添了几次内容。直到作者前几天在听完某大佬分享了https协议,并产生了深深的自我怀疑——为什么有人可以随时把https建立连接的过程讲得那么清楚?这个过程明明很复杂啊!大佬当时...原创 2018-02-15 11:15:56 · 706 阅读 · 0 评论 -
【Android 网络协议 一】TCP/IP网络模型
本章将从五个方面讲TCP/IP模型:物理层、链接层、网络层、传输层、应用层。首先来看下面这张图: 互联网主要是通过分层来实现的,每一层都定义它自己的功能,它就像一个大楼一样,每一层都需要底层来支持。我们开发人员能接触到的都是最上层,可如果想深入理解互联网,必须从底层开始研究。 最底层是物理层,它通过物理的手段把计算机连接起来。最上方的应用层是最接近我们用户的。接下来我们...原创 2018-02-15 11:19:47 · 950 阅读 · 0 评论 -
【Android 网络协议 四】DNS解析
我们知道,网络中的大部分通讯都是基于TCP/IP协议的,而TCP/IP协议中有个很重要的协议——IP协议,它是基于IP地址的。我们无法记住大量的IP地址,所以就需要DNS服务器能把域名翻译成IP地址。一、什么是DNS? 它所提供的服务是用来将主机名和域名转换为IP地址的工作。我们知道域名和IP地址是一一对应的关系,但是多个域名可以对应同一个IP地址。 二、DNS查询过程 ...原创 2018-02-15 11:20:39 · 1782 阅读 · 0 评论 -
【Android 技能树】唉唉,知识框架体系就在这里呢,你还不点进来吗?
Hello 祝贺你能关注到Colin的博客,因为你要知道,能认识我是一件概率很小的事情。我会在这个专栏里从以下这几个方面来介绍Android知识框架体系,希望你们能来见证Colin的成长。Android基础异步消息处理机制ViewAndroid项目构建开源框架Android异常与性能优化热门前沿知识Java虚拟机设计模式网...原创 2018-02-19 16:34:19 · 417 阅读 · 1 评论 -
【Android 热修复与插件化 一】带你入门Android插件化(附demo)
一. 背景Android插件化作为每个合格的Android程序员都必须会的技术,被各大厂广泛使用。随着各大厂对移动互联网的垄断,我们渐渐发现app集成的功能越来越多。比如如下几个app(携程、淘宝、支付宝): 可以看到每一个app都被集成了无数的功能入口,就拿淘宝来说,“天猫”、“外卖”、“飞猪”、“拍卖”,这任何一个入口都其实是一个app,只不过被集成到“淘宝”这个入口里了。如果没...原创 2018-03-08 00:13:41 · 10682 阅读 · 31 评论 -
【Android源码解析】从源码角度深入分析AsyncTask原理
一. 什么是AsyncTask?是Android提供的轻量级的异步类,封装了线程池和handler。它是个抽象类,使用时需要去继承它,然后去实现异步操作,并反馈异步执行的结果。二. AsyncTask使用方法首先先来看个例子,这是之前写过的一个gif图片下载的异步任务。使用AsyncTask要注意它的三个参数和五个方法。 1. 三个参数 第一个,代表执行AsyncTask传入的参数...原创 2018-03-20 00:14:08 · 311 阅读 · 0 评论 -
送给每一个关注Colin的朋友
这篇博客是献给所有的“屌丝”、“宅男”、“loser”,所有别人会说他是“没有未来”的人,因为其实我就是这么一个人。 我上学的时候,跟我所有的同学都不太一样,我不会出去玩,也不会打球,也不会社交,只会躲在自己的屋子里。而且,我的生活,它就是一系列的失败。你知道吗?刚进大学时,一个连基本office操作都不会的我,害得全班同学必须等着不会“盲打”的我打完字才能下课。对不起,你没有天赋。...原创 2018-02-21 23:49:04 · 2435 阅读 · 6 评论 -
【Android 设计模式】Builder模式
一. java的builder模式详解1. 概念又名建造者模式,是较为复杂的创建性模式,它将客户端与包含多个组成部分的复杂对象的创建过程分离。主要是为了将复杂对象的构建与表示分离。2. 使用场景当构建一个对象需要很多参数,并且参数个数或者类型不固定的时候。 glide图片加载的时候,可以设置缓存、图片大小等,使用的就是builder模式。3. UML结构图分析...原创 2018-03-21 23:42:58 · 501 阅读 · 0 评论 -
【Android 异常与性能优化】UI卡顿相关
UI卡顿原理60fps->16ms 接下来我将带大家看下这两个数字的原理。其实很多用户感受到的卡顿问题,就是来源于UI渲染。我们知道Android系统每隔16ms发出信号渲染一次UI,如果每一次渲染都成功就能达到流畅的画面,如果一次渲染在16ms内无法完成就会让用户感受到卡顿。 我们在滑动listView时有时会感觉到卡顿,这是因为Item结构过于复杂/层级过多,无法在16ms内渲...原创 2018-02-19 15:40:22 · 372 阅读 · 0 评论 -
【Android 异常与性能优化】内存管理
内存管理机制概述分配机制 操作系统会为每一个进程合理地分配内存资源,从而保证每一个进程都能正常运行,而不至于内存不够使用或内存占用过多。回收机制 操作系统会在内存不足时合理地回收内存并再分配内存,从而保证新的进程能够正常进行。Android内存管理机制分配机制 Android在为每个进程分配内存的时候采用了弹性的分配方式,就是说,一开始系统不会为app分配太多内存,而是为每一个app分原创 2018-02-19 16:17:39 · 266 阅读 · 0 评论 -
【Android 异常与性能优化】Bitmap相关
LRU它用来清理最近最少使用对象,其内部是通过LinkedHashMap实现的。它提供了get和put方法来完成对象的添加和获取,当缓存满了它可以提供一个trimToSize方法来清理最近最少使用对象。我们来看下这个方法是如何实现的: 可以看到这个方法会一直循环判断size是否小于maxSize,如果不小于maxSize,则会从LinkedHashMap中依次remove下一个元素,并调...原创 2018-02-19 14:01:37 · 316 阅读 · 0 评论 -
【Android 项目构建】Git版本控制实战
在公司用Git作为版本控制管理工具已经一年了,对Git的各项操作也了然于心了。相比刚开始使用Git时常常被Git各种奇葩问题阻塞住开发进度的我,现在的我确实已经踩过了很多坑,也对自己感兴趣的Git相关原理进行了分析。本来打算就把这篇blog作为Git使用经验的备忘录,可看到新来的同事还是被Git的各种坑折磨得很痛苦的样子时,我意识到还是有必要把自己使用Git的经验分享出来的,这件事还是有价值的!你...原创 2017-08-03 14:29:36 · 328 阅读 · 0 评论 -
【Android 项目构建】深入理解Gradle
一、Gradle基础1、Gradle是什么? Gradle是以groovy为编程语言,面向java应用的自动化构建工具。 2、Gradle文件的三种类型:(1)类型:settings.gradle、根目录下build.gradle、module目录下build.gradle。(2)执行顺序:settings.gradle在初始化阶段执行,根目录下build...原创 2017-07-10 16:29:22 · 406 阅读 · 0 评论 -
【Android View相关】View的绘制机制
View树的绘制流程measure(计算视图大小)–>layout(安置视图位置)–>draw(重绘视图) 在onMeasure方法中会递归对所有子元素进行测量,layout过程与measure过程类似,也是一个递归的过程。measure measure测量是一个从上到下的递归过程。在measure方法中有几个比较重要的参数: 1. ViewGroup.Layou...原创 2018-02-18 23:18:25 · 376 阅读 · 0 评论 -
【Android 编程架构】MVC/MVP/MVVM
Android发展到今天比较主流的架构是MVP,但是MVP其实也是对MVC的一种演变,所以在着重介绍MVP之前先总结一下MVC模式。MVC定义在Android开发过程中流行的开发框架曾经采用的是MVC模式,用MVC模式的好处就是便于UI界面的显示和业务逻辑的分离。 MVC的全名是Model View Controller,中文意思就是“模型 视图 控制器”,它是一种软件的设计典范,它...原创 2018-02-18 01:17:45 · 1003 阅读 · 0 评论 -
【Android 编程架构】MVP实战(附demo)
今天有时间,把之前用mvp架构开发的一个需求整理一下。网上大多数是介绍mvp的简单应用,而如何在产品级项目中真正应用mvp架构?一、mvp架构的优势到现在为止,我用mvp架构做的需求已经上线了3个大版本,n个小版本了。说实话,刚开始做的时候,并没有意识到mvp对于开发有多大的好处,可是经过这几次版本迭代,mvp架构的优势就凸显出来了——当要加需求时,我只需要改presenter就可以了...原创 2017-07-28 15:31:53 · 657 阅读 · 2 评论 -
【Android 源码解析】从源码角度深入分析Handler消息机制
一、引言说起消息机制,相信每一个Android开发都不陌生。从开始写Android代码的第一天起,我就一直在试图理解handler机制,这几年中也不断去读handler源码。最近有了一些收获,觉得自己已经非常了解handler源码了,故在这里做下总结,希望分享给需要的小伙伴。首先先看如上这个异常:只有创建View的原始线程才能更新UI。这个异常在什么情况下出现呢?在Android系...原创 2018-01-23 20:56:03 · 320 阅读 · 0 评论 -
【Android Activity相关】任务栈、启动模式相关问题总结
1.任务栈 任务栈在android当中真的是非常非常重要的概念。“栈”顾名思义是一个先进后出的容器,“任务栈”是用来存储Activity的,当我们打开一个新的Activity或者退出一个Activity,都会在“任务栈”中添加或删除这个Activity,所以一个“任务栈”其实是包含了一个Activity的集合,Android系统可以通过任务栈有序地管理每一个Activity。 在And...原创 2017-12-14 16:09:36 · 293 阅读 · 0 评论 -
【Android Activity相关】Activity的生命周期问题总结
1.什么是Activity Activity是与用户交互的接口,它提供了一个界面,让用户进行点击滑动等操作。2.Activity的四种状态 (1)running:Activity处于活动状态,可以提供给用户交互操作,处于Activity栈顶。 (2)paused:Activity失去焦点(被非全屏Activity占据,被透明Activity占据等),这时用户只是失去了与Activ...原创 2018-02-02 10:29:48 · 231 阅读 · 0 评论 -
【Android Fragment相关】Fragment基础知识总结
1.Fragment为什么会被称为第五大组件? 在日常开发中,我们与Fragment打交道的时间非常多,不亚于其他四大组件,并且Fragment也有自己的生命周期。Fragment是在Android 3.0中被引入的,起初是为了解决大屏幕手机的适配问题。不过Fragment必须要依赖Activity才能使用。2.Fragment加载到Activity的两种方式 (1)添加Fragmen...原创 2018-02-13 23:56:21 · 292 阅读 · 0 评论 -
【Java 基础】反射
编译时vs运行时“编译时”是指,将java代码编译成class文件的时期,不涉及内存。 “编译时类型”是指,编译时类型由声明该变量时使用的类型决定。“运行时”是指,java虚拟机执行class文件的时期,涉及内存。 “运行时类型”是指,运行时类型由实际赋给该变量的对象决定。动态绑定 “编译时”调用的是声明类型的成员方法,“运行时”调用的是实际类型的成员方法。 注意:调用引用类型的...原创 2018-02-17 12:52:45 · 253 阅读 · 0 评论 -
【Java 虚拟机】堆/栈
Java运行时的内存分配策略静态方法区主要存储:静态数据、全局static数据和常量这块内存在程序编译的时候就已经分配好在整个程序运行期间,都会存在栈区方法体内的局部变量都在栈上创建在方法执行结束后,这些局部变量所占内存都会被释放堆区又称为动态内存分配区,是指在程序运行时直接new出来的内存,这部分内存在不使用时,就会由Java垃圾回收器负责回收堆内存...原创 2018-02-17 11:31:54 · 254 阅读 · 0 评论 -
【Java 虚拟机】类加载器
一、引言我们编写好的Java程序都是由若干个class文件组织而成。当我们程序运行时,会调用该程序的一个入口函数来执行程序功能,而这些功能是封装在不同的class文件中的,所以就常常会从这个class文件调用另一个class文件中的方法。如果另外一个class文件不存在,就会引发系统异常。程序在启动时,绝对不会加载程序需要的所有class文件,而是根据程序需要,通过Java的类加载机制来动态地加载...原创 2018-02-17 00:45:21 · 262 阅读 · 0 评论