
Android 学习笔记
文章平均质量分 96
鸽一门
Slow down, Old Sport. 慢慢来,比较快~
展开
-
走进RecyclerView未解之迷 ------ 原理和优化
(前言暂位符号)View holder究竟是什么?ProblemView holder 和 item view 是什么关系? 一对一?一对多?多对一?View holder 解决的是什么问题?View holder 和 ListView 的 item view 的复用有什么关系?没有实现 View holder 的 getView() 的例子如下,大量的 findViewById() 方法被调用,看似不是很大的开销,但其方法的底层实现是深度优先搜索,时间复杂度是O(n)。完全可以避免原创 2020-05-19 00:31:56 · 1437 阅读 · 0 评论 -
Gradle再回首之重点归纳
回顾Android应用的构建过程是一个复杂的过程,涉及到很多工具。首先所有的资源文件都会被编译,并且在一个R文件中引用,然后Java代码被编译,通过dex工具转换成dalvik字节码。最后这些文件都会被打包成一个APK文件,此应用被最终安装到设备之前,APK会被一个debug或者release的key文件签名。一句话定义GradleGradle是一种构建工具,其构建基于Groovy(DSL) ------ 一种基于JVM的动态语言,用于申明构建和创建任务,让依赖管理更简单。年少时第一次对Grad原创 2020-05-19 00:12:45 · 953 阅读 · 0 评论 -
Android Dex VS Class:实例图解剖析两种格式文件结构、优劣
前段时间在了解Android代码混淆和反编译原理的时候,都涉及到了dex文件,该文件中保存着app中重要的数据信息,例如源码中使用的系统api,或者是否含有广告,更甚者通过解析AndroidManifest.xml知晓activity、service、receiver等四大组件数据信息(未混淆的情况下),而且一个程序应用的所有数据信息都存储在一个dex文件中,可见该格式文件存储信息的强大优势!说起信原创 2018-01-31 15:38:20 · 3308 阅读 · 2 评论 -
优雅设计封装基于Okhttp3的网络框架(三):多线程下载功能核心实现 及 线程池、队列机制、终止线程解析
通过前两篇博文的学习,已经带领大家学习了HTTP协议与Okhttp相关内容的学习,并且在上篇博文已经完成了初始编码工作:定义好了网络请求接口DownloadCallback 和网络请求类HttpManager,可以完成同步、异步请求操作,而接下来将编码实现多线程下载功能的核心代码,通过多个线程之间的管理和调度来处理下载任务,最后再引入队列机制来完善功能。此篇文章将学习:多线程核心功能编写,线程池原理,队列机制原创 2017-07-11 12:39:36 · 3750 阅读 · 0 评论 -
优雅设计封装基于Okhttp3的网络框架(完):原生HttpUrlConnction请求、多线程分发 及 数据转换
前5篇博文完成了此框架的一大模块—–多线程下载,而这两篇文章实现另一大模块——Http基本框架封装,在上一篇博文中完成了HttpHeader的接口定义和实现、状态码定义及response、request接口封装和实现,定义了许多接口和抽象类,在接下来编码过程中会体现出程序的扩展性重要性。在此篇博文中将添加新功能——原生请求的类库支持,你会发现在此基础上只需增加3个类即可,充分体现出了程序的扩展性。新原创 2017-08-03 07:57:38 · 3868 阅读 · 1 评论 -
优雅设计封装基于Okhttp3的网络框架(六):HttpHeader接口设计实现 及 Response、Request封装实现
到目前为止,多线程下载功能设计、编写、优化工作已经完成,但是网络框架编写工作并没有完成,此篇将完成Http核心架构,编写的新功能还是围绕在http请求上,涉及到的知识点:httpHeader的接口定义和实现http请求头和响应头访问编写http状态码定义http中的 response封装、request接口封装和实现原创 2017-08-02 10:31:57 · 3513 阅读 · 0 评论 -
优雅设计封装基于Okhttp3的网络框架(五):多线程、单例模式优化 及 volatile、构建者模式使用解析
关于多线程下载功能,前四篇博文所讲解内容已经实现,接下来需要对代码进行优化。开发一个新功能并不复杂,难的是考虑到代码的扩展性和解耦性,后续需要进行的bug修复、完善功能等方面。此篇内容主要讲解代码优化,将从线程优化、单例优化、设计优化这三个方面进行讲解。此篇内容将涉及到以下知识:线程优化及Linux系统中线程调度介绍Android中常用的5种单例模式解析volatile关键字底层原理及注意事项原创 2017-08-01 11:45:21 · 2286 阅读 · 0 评论 -
优雅设计封装基于Okhttp3的网络框架(四):多线程下载添加数据库支持(greenDao)及 进度更新
通过前三篇博文的学习,已经编码实现多线程下载功能的核心代码,通过多个线程之间的管理和调度来处理下载任务,最后再引入队列机制来完善功能。此篇博文主旨需要将下载的进度存储到数据库中,目的是为了可以在恢复时可以取出进程下载进度,从未下载部分开始下载,能更节省流量,提高用户体验。此篇文章将学习:多线程下载添加数据库支持greenDao开源库自动生成数据库相关代码完善网络请求接口中的进度更新功能原创 2017-07-31 14:08:43 · 2387 阅读 · 0 评论 -
优雅设计封装基于Okhttp3的网络框架(二):多线程下载功能原理设计 及 简单实现
通过上篇博客的学习,相信大家已经对Http协议及OKhttp3框架使用有一定的理解,切身感受到OKhttp3请求网络方法简单易懂,是否意味着可以直接通过它去解决开发中的相关网络需求?并非如此,它的使用方式确实简单,但是在实现某一模块或功能时,不仅要考虑OKhttp3框架使用,还涉及到其余网络编程相关知识的混合,例如线程的调度和管理、本地缓存操作处理。当多个模块融合在一起时,会发现实现基本功能不仅仅是原创 2017-07-09 13:24:11 · 2177 阅读 · 0 评论 -
优雅设计封装基于Okhttp3的网络框架(一):Http网络协议与Okhttp3解析
如今Android开发中Okhttp已成为主流网络框架,内置丰富、全面、强大的网络请求功能,也为开发者提供了api,但是在项目开发中的大量使用,会出现api的重复调用、代码冗杂等现象。应当封装一个适用于项目的网络框架,便于使用。此系列文章旨于:基于okhttp3原始框架来设计封装一个满足业务需求、扩展性强、耦合度低的网络框架。具体框架功能为:扩展其对数据库的支持对多文件上传、多线程文件下载的支持数据解析原创 2017-07-04 16:36:11 · 4551 阅读 · 0 评论 -
以 Okhttp3源码 为例 ------ 图解 缓存机制 的原理和实现(下)
之前写的一篇是介绍缓存机制的流程和原理,并讲解了HTTP协议中缓存相关的字段,彻底了解了缓存机制原理后实践了Okhttp3框架的缓存实现,即第一篇的内容已经打下了基础,此篇就从源码的角度来解析Okhttp3框架的缓存机制的实现。(未看过第一篇,建议先了解缓存机制原理及HTTP协议中的重要字段,链接如下:) http://blog.youkuaiyun.com/itermeng/article/detai原创 2017-07-04 09:17:29 · 2788 阅读 · 3 评论 -
你仍未知道那些有关 Activity典型、异常情况下的生命周期解析
平常在移动开发过程中,说起Activity的生命周期,开发人员不会陌生,但是此处概念切勿混淆,其生命周期分为典型情况下的生命周期与异常情况下的生命周期。第一种代表在用户交互情况下,Activity所经历的生命周期变化;第二种是指Activity被系统回收或者当前设备的Configration发生改变从而导致Activity被销毁重建。原创 2017-06-26 09:29:26 · 1635 阅读 · 0 评论 -
Effective Android:app优化 ------ 内存管理、内存泄漏、冷启动
其实关于内存泄漏的概念开发人员并不陌生,简单来说就是该被释放的对象,由于被某些实例持有引用,导致GC无法回收,不能及时被释放。以下只是简单介绍概念,详细可研究jvm。原创 2017-06-12 09:17:06 · 1394 阅读 · 0 评论 -
Gradle 与 Android的三生三世:是我构建了你,你必将依赖于我
Android应用的构建过程是一个复杂的过程,涉及到很多工具。首先所有的资源文件都会被编译,并且在一个R文件中引用,然后Java代码被编译,通过dex工具转换成dalvik字节码。最后这些文件都会被打包成一个APK文件,此应用被最终安装到设备之前,APK会被一个debug或者release的key文件签名。以上步骤人工操作着实繁原创 2017-11-20 09:45:26 · 2901 阅读 · 1 评论 -
Android 高级UI解密 (二) :Paint滤镜 与 颜色过滤(矩阵变换)
若是曾经查看过系统UI的源码,会发现其中使用了一些渲染效果,例如将图片加上黑白、怀旧的效果,生活中常用的逆天美颜相机,其中的原理就是使用了**滤镜效果、颜色通道过滤**。若还要深究其原理组成,便涉及到了高等数学里的矩阵变换,也就是Android 中的**颜色矩阵**!此篇文章便来一探究竟如何实现滤镜和其原理组成。(关于矩阵这一块,无需过度深究数学部分,此处为了充分理解渲染效果,只需了解大概原理,利用其API完成简原创 2017-12-21 10:41:06 · 3067 阅读 · 0 评论 -
Android 高级UI解密 (一) :Paint图形文字绘制 与 高级渲染
UI即User Interface(用户界面)的简称,泛指用户的操作界面,view是用户界面最基本的组件,其扩展了View类,更控制着屏幕上的绘制和实践,例如被触控。屏幕上显示的所有元素都依赖view。在自定义View或Layout时,不仅要了解测量(onMeasure)、布局(onLayout)、展示(onDraw),更要考虑处理不同的点击、滑动输入事件(onTouchEve原创 2017-12-18 10:50:20 · 4265 阅读 · 0 评论 -
Android 高级UI解密 (六) :结合Activity启动源码剖析View的诞生
1原创 2018-06-21 14:38:09 · 814 阅读 · 0 评论 -
Android 高级UI解密 (五) :PathMeasure截取片段 与 切线(新思路实现轨迹变换)
一. PathMeasure基础API介绍顾名思义,PathMeasure是一个用来测量Path的类,以下先来介绍API基本使用,它的方法也比较少。1. 构造方法 方法名 释义 PathMeasure() 创建一个空的PathMeasure PathMeasure(Path path, boolean forceClosed) 创建 PathMea...原创 2018-06-11 15:06:50 · 4173 阅读 · 2 评论 -
Android 高级UI解密 (四) :花式玩转贝塞尔曲线(波浪、轨迹变换动画)
一. 贝塞尔初识概念 A Bézier curve (pronounced [bezje] in French) is a parametric curve frequently used in computer graphics and related fields. Generalizations of Bézier curves to higher dimensions ar...原创 2018-05-21 21:19:03 · 8015 阅读 · 2 评论 -
Android 高级UI解密 (三) :Canvas裁剪 与 二维、三维Camera几何变换(图层Layer原理)
Canvas变换技巧(1)平移Tanslatevoid translate (float dx, float dy)API作用:用指定的转换对当前matrix 进行预处理。 参数说明: x、y轴移动的距离。注意:这里牵扯到canvas的概念,我们通常称之为“画布”,在此画布上可以绘制任何图像。此API的功能就是移动画布位置,需要强调的是每次canvas执行drawXXX的时候就会原创 2018-05-21 15:35:19 · 3544 阅读 · 1 评论 -
浅析RxJava 1.x&2.x版本区别及原理(三):1.x 版本 Scheduler调度线程变换及subscribeOn、observeOn方法源码解析
上两篇文章都是对比分析RxJava中较基本的订阅流程与操作,即Observable、Flowable等基本元素的源码,还有map、lift操作符的源码。在对Rxjava框架有了一个坚实的基础后,此篇文章将直袭Rxjava中最闪亮的Point,也是Android猿平常在开发中经常遇到的需求 —— 线程切换,主线程中需要进行耗时操作,要求切换到子线程,子线程中需要进行UI更新,要切切换到主线程。以上切...原创 2018-05-06 16:44:05 · 944 阅读 · 0 评论 -
浅析RxJava 1.x&2.x版本区别及原理(二):map、lift操作符源码解析
上一篇文章讲解了RxJava 1.x&2.x版本的基本元素(Observable、Subscriber、Flowable、Observer等)流程源码分析,对RxJava两个版本的基本使用元素和订阅原理有了一定的认识后,此篇文章将重点置于map、lift操作符,已知操作符的作用是将发出的数据进行处理再发送,RxJava源码内部具体操作原理如何?来一探究竟。此系列文章重点在于分析源码,并...原创 2018-05-04 17:08:21 · 960 阅读 · 0 评论 -
浅析RxJava 1.x&2.x版本使用区别及原理(一):Observable、Flowable等基本元素源码解析
RxJava开源框架的风靡程度在Github上无需多言,它带来的响应式编程模式和线程随意切换、嵌套请求、背压等功能给了开发者耳目一新的体验,更是成为了大多数APP中常用的RxJava+Okhttp/Retrofit+MVP/MVVM/Clean黄金组合中的一员。我犹记得知乎团队在去年线下还开展过一次线下RxJava交流会,邀请了扔物线讲解相关知识及体验,可见各大厂对此的重视度。如非要列举一个RxJ...原创 2018-05-02 23:27:55 · 5732 阅读 · 1 评论 -
Android热修复(一):底层替换、类加载原理总结 及 DexClassLoader类加载机制源码探索
在早期的Android开发中,若客户端发布更新后遇到紧急bug需要及时修复,通常只能等待新版本解决再次发布,但是重新发布版本代价太大且用户下载安装成本高,若Bug未及时修复,无疑会严重影响用户体验,因此衍生了一系列技术来解决以上问题,其中一种就是Hybrid方案,即将需要经常变更的业务逻辑以H5的形式独立出来。还有一种是插件化方案。因此在Android开发近几年中,又衍生出了新的解决方案——热修复。开发者可以直接将更原创 2018-02-23 09:24:17 · 7088 阅读 · 2 评论 -
Android热修复(二):以DexClassLoader类加载原理编写demo实现类替换修复
上一篇文章简易总结了热修复实现的几大原理,并详细介绍了Android中的类加载机制及源码探索,Android的类加载机制涉及到ClassLoader、DexClassLoader 、PathClassLoader 、BaseDexClassLoader 、DexPathList、DexFile多个类之间方法互相调用,但是真正的核心实现类其实是DexPathList,它具体实现了`findClass`方法,即所谓的“类原创 2018-02-28 23:57:11 · 7900 阅读 · 5 评论 -
Android内、外存储 易混淆点剖析(/mnt/sdcard、/storage/sdcard0、/storage/emulated/0等区别)
说起Android“内部存储”,对于开发者而言可以毫不犹豫地脱口而出,不就是/data/data目录嘛,也不尽然,/data/user/0/又如何解释?那说起“外部存储”,例如sd卡目录获取值,更是众说纷纭,是/mnt/sdcard?还是/storage/sdcard0?莫非是/storage/emulated/0?此疑问起源要追溯到笔者在写上一篇博文,即以DexClassLoader类加载原理编写原创 2018-03-07 15:11:41 · 37840 阅读 · 11 评论 -
以 Okhttp3源码 为例 ------ 图解 缓存机制 的原理和实现(上)
缓存机制一直以来是一个不可忽视的重要模块,广泛地被运用到 网页端和移动端。对于服务器而言,客户端的缓存很大程度上缓解了它的压力,更是为用户带来了产品快速响应的体验,拥有很多好处。既然是网络请求,必然与HTTP协议联系紧密,不论你是否有这之类的经验,此篇将会从基础开始总结,共同学习缓存机制。原创 2017-02-06 16:29:22 · 4450 阅读 · 0 评论 -
Android收发UDP报文详解 及 优雅解决接收不到问题
前段时间项目组接了一个研究所项目,移动端这边需要做一个UDP接收报文的程序APP,其中还涉及到多页面之间收发报文、动态修改地址、端口号等等。原本编写这个收发程序并不难,步骤也比较固定,在网上找了相关例子进行二次开发,可是发现UDP报文接收不到,这其中还是隐藏着某些坑,仅以此篇文章来总结其奥妙精髓。原创 2017-06-27 08:45:57 · 21555 阅读 · 11 评论 -
Android ListView封装(代码优化):抽取方法共性,封装 BaseAdapter 和 ViewHolder
Android ListView :抽取方法共性,封装 BaseAdapter 和 ViewHolder 大多App都会使用到的基本控件 ——- Listiew,特别像新闻浏览类的比如说“今日关注”,或者“应用宝”这种汇集手机软件集合的。而且大家都知道 需要给每个单独的 ListView 搭配相应的适配器 Adapter 。如果你的项目中使用ListView 的频率很少甚至没有,那我不建议你对原创 2016-09-07 20:09:18 · 2070 阅读 · 0 评论 -
Android自定义控件:图片比例适配,解决图片白边(详解View中onMeasure方法)
当App中涉及到布局需要展示大量图片时,你就应该考虑到“图片比例适配“的问题。当图片的宽高规格不同时,你设置展示的ImageView是否可以完好地展示,填充满?也就是说ImagView的比例和图片的比例不匹配,不然的话会导致图片旁会留有空白,这样一系列的组图模块下拉,有的有白边,有的没有,非常影响美观。接下来的自定义控件将可以消除 展示图片有白边的问题,在不对图片进行任何裁剪、拉伸的前提下,最大限度原创 2016-09-15 19:29:41 · 4902 阅读 · 1 评论 -
Android依赖注入框架:ButterKnife 8.4.0新版本导入及使用详解
一直在使用 Butter Knife的同志们应该知道此库不断更新,现在导入主要是运用 android-apt,而且使用方法有了细微变化,下面来依次介绍。官方文档在此: https://github.com/JakeWharton/butterknife导入到项目中1. 在项目中的 build.gradle 中包含“android-apt”插入buildscript { repo原创 2016-11-01 15:34:03 · 1286 阅读 · 0 评论 -
Android 消息机制:Handler、Looper、Message源码 详细版解析 ------从入门到升天
简介首先复习一下大多数人都知道的一个流程:最外框是一个主线程,它在运行的时候,内部已初始化一个轮循器Looper,而Looper类中有消息队列MessageQueue,接着会调用loop()方法不断去读取消息Message,该方法是一个死循环,读取消息Message后会将消息交给其对应的handler(只要Message存在,handler也存在)。最后对应的handler会调用handlerMes原创 2016-10-06 19:44:48 · 2131 阅读 · 1 评论 -
Android 源码详解:View的事件分发机制
1原创 2016-10-24 12:41:35 · 1064 阅读 · 0 评论 -
Android 学习笔记:View的事件分发机制 解析及实例讲解
想必大家对编写自定义控件的流程不陌生,独自编写过许多继承View、ViewGroup之类的自定义控件。在编写的过程中肯定要考虑到View的事件分发机制,不可避免的重要部分,各位有考虑过以下问题:1. 事件的传递机制? 2. 事件的分发过程涉及到的方法? 3. 接收事件的方法的优先级?接下来的内容依次来解析: (以下融合个人理解和任玉刚老师的《Android开发艺术探索》书中内容)点击事件的传递原创 2016-10-21 14:09:59 · 1290 阅读 · 0 评论 -
Android之“观察者模式”解析及实际应用:"应用宝"软件下载中 进度条同步更新
这是模仿“应用宝”的demo,这里提取出一个功能来讲解:在首页中,选择一个App点进去,进入到详细介绍页面,点击页面最下方下载按钮,进度条变化开始下载。再次回到首页,首页中的进度条 与 详细页面的进度条 同步更新 !首先,我们需要一个“下载管理器”DownloadManager,也就是观察者模式中的“被观察者”。一般像这种全局的管理器,需要将它设置成 “单例模式”,在这里使用 饿汉原创 2016-09-22 14:14:46 · 2191 阅读 · 0 评论 -
Android 异步任务:AsyncTask 学习解析及基本使用 (Android单线程模式)
(在此声明:以下内容部分来自于慕课网中“AsyncTask概述”讲解视频中总结而来,Android单线程模式Android应用程序中大部分代码在一个组件(比如活动或服务)的上下文中运行。大部分时间,一个Android进程中仅进行一个线程,称为主线程。各个组件之间共享此主线程的影响,可是Android不可能只有单一的主线程,将所有的逻辑放在主线程中实现。类似于一些耗时的操作:请求网络原创 2016-10-09 18:39:04 · 1603 阅读 · 0 评论 -
7. findViewById 返回为null (自定义控件)
一.自定义控件 findViewById返回为null首先讲一个具体的问题,这几天在做demo时,写了一个自定义组合控件,最后在run的时候显示这两行报错。原先还以为是setOnClickListener错了,后来经过debug才发现findViewById查找我的自定义组合控件为null !debug结果:接下来就开始了我痛苦的找bug过程,关于这段血泪过程,来总结一下findViewById原创 2016-07-28 14:59:22 · 8008 阅读 · 0 评论 -
Android studio 成功导入第三方开源项目 SlidingMenu (亲手教学版本)
最近试着往Android studio项目中导入第三方类库/源码包 之类的,各种谷歌、百度学习,总算成功。话说无论导入类库,会了一个,其余的也是异曲同工了,所以以下详细介绍导入步骤:一.基本操作1.选择源码文件选择你要的类库或源码,github上有很多很好的资源,这里是从上面下载的SlidingMenu,解压后的文件(如下图) (1)art : 项目中包含的一些资源图片 (2)example原创 2016-08-17 14:08:08 · 1172 阅读 · 0 评论 -
Android 之 三级缓存(内存!!!、本地、网络)及内存LruCache扩展 及源码分析--- 学习和代码讲解
一. 三级缓存简介如上图所示,目前App中UI界面经常会涉及到图片,特别是像“今日关注”新闻这类app中,图片运用的几率十分频繁。当手机上需要显示大量图片类似listView、gridView控件并且用户会上下滑动,即将浏览过的图片又加载一遍,若是不停的进行网络请求,很快就会OOM,这时三级缓存显得尤为重要,适时地利用资源,进行图片缓存,下面就用一个新闻组图demo进行图片缓存演示。 1.三级缓存原创 2016-09-01 21:24:10 · 2613 阅读 · 0 评论 -
Android 中 ListView 的 下拉刷新 和 上拉加载 的 重点及学习(二)
一鼓作气,昨天写了下拉刷新,今天把 上拉加载也写完,不然又要拖好久了……大家都知道,编程时容易,写下来的话要斟酌许久,有错误也请大家指示一下,学习学习 :)(如果是第一次看我的这篇博客的朋友,建议你们先去看一下(一),再来看二)如上gif动图所示,接下来我们要完成 【 上拉加载 】 的实现。(其实看了下拉刷新的朋友,熟悉了步骤之后,再看这个 上拉加载,发现都是差不多啦~)原创 2016-08-24 14:45:55 · 1134 阅读 · 0 评论