自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(199)
  • 收藏
  • 关注

原创 Android进阶:七、Retrofit2.0原理解析之最简流程【上】

retrofit 已经流行很久了,它是Square开源的一款优秀的网络框架,这个框架对okhttp进行了封装,让我们使用okhttp做网路请求更加简单。但是光学会使用只是让我们多了一个技能,学习其源码才能让我们更好的成长。本篇文章是在分析retrofit的源码流程,有大量的代码,读者最好把源码下载下来导入IDE,然后跟着一起看,效果会更好(文末有源码获取方式)一.retrof...

2019-04-08 16:05:46 217

原创 Android进阶:六、在子线程中直接使用 Toast 及其原理

最近因为个人原因,很久没有更文章,感谢关注的小伙伴,望谅解!一般我们都把Toast当做一个UI控件在主线程显示。但是有时候非想在子线程中显示Toast,就会使用Handler切换到主线程显示。但是子线程中真的不能直接显示Toast吗?答案是:当然可以。那应该怎么操作呢?在当前线程中先初始化一个Looper即可!Looper.prepare();Toast.makeTex...

2019-03-28 16:04:35 623

原创 从技术面试官的角度怎样看待你的简历和面试?

公司组织过多次校园招聘和社会招聘,很多人在招聘技术专家组中浑水摸鱼、鱼目混珠、插科打诨,所以也谈谈面试中那些事儿。一.简历简历的重要性是不言而喻的,如果简历写的好,我们可能已经内心里有了录用他的想法,把候选人请来只是验证一下想法的正确性,看看候选人是否有意向来。关于简历,从技术面试官的角度来看,需要注意以下几点:1 简明扼要基本上我们看简历都是第一页决定了整体印象。有一次一个工作了1...

2019-03-22 16:29:53 443

原创 Android带有粘性头部的ScrollView

前言,一天在点外卖的时候,注意到饿了么列表页的滑动效果不错,但是觉得其中的手势滑动还是挺复杂的,正好又碰到了在熟悉Touch事件的理解当中,所以就抽空对着饿了么的列表页面尝试写写这个效果1.先贴一个实现的效果图逻辑是当外部的ScrollView没有滑到底部的时候,往上滑动的时候,是滑动外部的ScrollView,当外部的ScrollView到达底部的时候,我们再网上滑,就是滑动内部的列表了...

2019-03-22 15:28:58 254

原创 深度 | Android 整体设计及背后意义

摘要:现实工作中经常可以听到这样的说法:框架的升级带来协议性能的提升、编程模式的变革带来业务的飞跃...... 姑且不论这些表述是否有问题,实际上如果系统地看待事物整体,可能会有不一样的发现。现实工作中经常可以听到这样的说法:框架的升级带来协议性能的提升、编程模式的变革带来业务的飞跃...... 姑且不论这些表述是否有问题,实际上如果系统地看待事物整体,可能会有不一样的发现。以LINUX...

2019-03-22 15:12:16 248

原创 Android进阶:五、RxJava2源码解析 2

上一篇文章Android进阶:四、RxJava2 源码解析 1里我们讲到Rxjava2 从创建一个事件到事件被观察的过程原理,这篇文章我们讲Rxjava2中链式调用的原理。本文不讲用法,仍然需要读者熟悉Rxjava基本的用法。【文末有资料领取】一.Rxjava2 的基本用法Rxjava是解决异步问题的,它的链式调用让代码看起来非常流畅优雅。现在我们带上线程切换以及链式调用来看看。下面代...

2019-03-22 14:42:35 136

原创 Android性能优化之异常处理&应用瘦身

简介常见的异常无非就是ANR和OOM,掌握如何避免这两种异常有助于提升应用性能。另外,应用瘦身虽然不是性能的优化,而是app的优化,所以也放到这篇文章一起分享。异常处理ANR原因简述一下哪些地方是主线程:Activity的所有生命周期回调 Service默认执行在主线程 BroadCastReceiver的onReceiver回调 没有使用子线程的looper的han...

2019-03-21 17:47:41 197

原创 Android性能优化之内存优化&启动优化

内存优化内存检测工具Memory Monitors Memory Monitors是Android Studio中的工具,通过图形界面的方式比较直观的看到内存抖动的情况,还可以手动触发GC,配合内存快照,可以准确的看到哪些地方存在内存泄漏。 LeakCanary LeakCanary是一个检测内存泄漏的开源类库,使用比较简单。可直接在gitHub找到。 在应用内做相应的配置后,安装...

2019-03-21 17:44:09 314

原创 组件化极简方案--双方案可选

简介随着项目越来越完善,功能越来越多,代码也变得越来越复杂。为了更方便开发,以及多个模块并行开发,之前的模块分包的方式已经不能满足当前的需求,所以组件化开发势在必行。本文介绍了当前比较流行的组件化方案,模块间通信采用阿里的ARoute路由,并且在项目中提供了两种不同的组件化运行的方式,各有优劣,可根据自己的项目来选择不同的方式。思路模块解耦,把公共的功能三方及工具类下沉到底层,其他模块...

2019-03-21 17:36:52 178

原创 Android进阶:四、RxJava2 源码解析 1

本文适合使用过Rxjava2或者了解Rxjava2的基本用法的同学阅读一.Rxjava是什么Rxjava在GitHub 主页上的自我介绍是 "a library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一个在 Java VM 上使用可观...

2019-03-21 15:54:01 120

原创 Android进阶:三、这一次,我们用最详细的方式解析Android消息机制的源码

决定再写一次有关Handler的源码Handler源码解析一、创建Handler对象使用handler最简单的方式:直接new一个Handler的对象Handler handler = new Handler();所以我们来看看它的构造函数的源码: public Handler() { this(null, false); } ...

2019-03-20 20:11:25 108

原创 Android进阶:二、从源码角度看透 HandlerThread 和 IntentService 本质

上篇文章我们讲日志的存储策略的时候用到了HandlerThread,它适合处理“多而小的任务”的耗时任务的时候,避免产生太多线程影响性能,那这个HandlerThread的原理到底是怎样的呢?我们现在从源码角度解读:【文章底有资料领取】HandlerThread:继承自Thread,是一个可以使用Handler的Thread。因为在run方法内维护了一个Looper,可以通过Handler...

2019-03-20 15:55:58 116

原创 Android进阶:一、日志打印和保存策略

前言:项目开始没有做好日志统计工作,每次有问题后端都得找前端对接,严重影响工作效率。最近特地在项目中加上日志保存策略,在此分享,供需要的人学习。更详细的日志信息既然决定自定义一个log,那我们就可以让它显示更多的信息,如线程信息:threadId,threadName等:private String getFunctionName() { StackTraceEl...

2019-03-19 19:26:32 110

原创 android开发(3):列表listview的实现 | 下拉刷新

APP里面的列表太常用了,系统提供的listview或grideview可以做到。另外,我希望这个列表能够下拉时触发刷新,于是考虑使用封装了这个功能的开源项目,这里介绍这个:https://github.com/Yalantis/Phoenix这是一个支持下拉刷新的控件,里面包括了ListView。(1)引入下拉刷新库同样,先引入这个库,在app/build.gradle的depend...

2019-03-18 18:01:09 487

原创 android开发(2):多页面的实现 | Fragment的创建与使用

APP中出现多个页面再常见不过了。使用activity与fragment都能实现多页面,这里使用fragment来实现。延续“知音”这个APP的开发,之前已经创建了底部导航条与mainactivity。首先创建一个fragment,作为“广场”页面。在菜单中new一个fragment出来即可,如下面的截图:此时会自动生成这个fragment的xml跟类,xml用于界面设计,而fragmen...

2019-03-18 17:55:26 1041

原创 android开发(1):底部导航条的实现 | navigation tab

底部导航条,在iOS中叫tabbar,在android中叫bottombar或bottom navigation,是一个常用的切换页面的导航条。同样,如果有良好的第三方库,我们应该优先考虑,能用好别人的东西,已经很厉害。github上的roughike/BottomBar,曾经是热度较高的库,但是已经过时了,没有再维护,加到项目也会遇到编译的问题,所以这里不使用,这里使用的是PagerBo...

2019-03-18 17:53:00 671

原创 android开发(0):android studio的下载安装与简单使用 | sdk的安装与编译

android studio,简称AS,是集成开发环境,所谓集成,就是集编辑、编译、调试、打包等于一体。简单来说,通过AS,就可以开发出在android系统上运行的APP。我使用的是macos系统。在这个网站寻找AS来安装:https://developer.android.com/studio/这个网站的最下面有提到对电脑的最低要求。下载3.2版本,安装。安装后就可以启动as,如...

2019-03-18 17:35:47 210

原创 Android音频播放与编码

在这篇文章中,我们来学习:使用AudioTrack进行实时播放 学习WAV格式,将采集得到的数据编码成WAV格式 学习MediaCodec,将采集得到的数据编码成AAC格式AudioTrack播放音频数据Android提供了3套API供我们播放音频:MediaPlayer:适合在后台长时间播放本地音乐文件或者在线的流式资源,其内部播放音频依赖AudioTrac...

2019-03-14 17:28:24 326

原创 Android NDK入门 —— JNI加解密之一

前言最近在忙其他事情,今天想起JNI做加解密不错,于是我调查了一下AES使用JNI实现,试验过程发现用C或者C++出了很多问题,于是发现有人使用一种巧妙的方式,用Java做加解密,只是把加解密的Key放在SO库中,这里我要讲的就是这种方式。正文新建java类public class AESjni { public static native String myEncry...

2019-03-14 17:14:48 284

原创 Android NDK入门 —— 生成多个so文件

正题CMake编译首先想之前一样新建一个空项目,记得勾选Include C++ support。这是一个最简单的CMake编译so的项目。接着新建一个PlusJni.java类,在cpp目录下新建一个C++文件,我命名为native-plus-lib.cpp。可以通过自动创建C++方法的方法。public class PlusJni { static { Sy...

2019-03-14 17:11:03 557

原创 Kotlin 设计模式解析系列之单例模式

写在前面前段时间在回顾 Java 当中的 23(泛指并非只有23) 种设计模式,最近又在学习 Kotlin ,然后,便萌生了一个想法,是不是可以把两者结合起来,考虑到我是那种学完就忘的人,那就通过写笔记的形式把学习过程记录下来,加深印象,但是我的自制力又比较差,难以坚持下去,那就再通过一个系列文章分享的方式督促自己吧。于是,一个 Kotlin 的设计模式系列文章的 Flag 就这么立下来了...

2019-03-14 16:53:44 260

原创 Kotlin 初尝之项目实践总结

前言记不清什么时候翻 Android 官方文档的时候,发现提供的示例代码已经变成了 Kotlin...逛全球最大同性交友网站( GitHub )也发现越来越多的开源库都是基于 Kotlin 语言...关于 Kotlin 的相关书籍和资料也开始丰富起来了...Kotlin,一个神奇的网站...呸...是一个面向 JVM 的静态开发语言,16年推出 1.0 Release 版本,17年...

2019-03-14 16:43:39 146

原创 Android UI 测试指南之 Espresso

关于 Espresso Espresso 是一个简单好用的 Android UI 测试框架 Espresso 主要由以下三个基础部分组成: ViewMatchers - 在当前View层级去匹配指定的View . ViewActions - 执行Views的某些行为,如点击事件 . ViewAssertions - 检查Views的某些状态,如是否显示 . E...

2019-03-14 16:37:53 177

原创 Android 自定义注解初探

由于之前用到的很多开源框架如 GreenDao、EventBus、ButterKnife、ARouter 等都使用了自定义注解,因此发觉自己有必要去研究一下自定义注解了,于是写下此篇文章。什么是注解首先,要明白什么是注解。An annotation is a form of metadata, that can be added to Java source code. Classe...

2019-03-13 17:41:52 193

原创 Kotlin 基础-程序结构(上)

一、常量与变量1.1 类型推导在 Kotlin 中,只要是编译器认识的类型,就可以自动推导出变量的类型,不需要我们显示的指定。val a = "fancyluo" //推导 Stringval b = 666 //推导 Intval c = a + b //推导 String1.2 常量Kotlin 中使用value的缩写val来表示一个不...

2019-03-13 17:28:42 338

原创 Kotlin 基础 - 数据类型

一、Boolean 类型Boolean 值有两个值,分别为true或false。多数情况下,Kotlin 中的 Boolean 相当于 Java 中的基本类型 boolean,只有在必要的情况下才会装箱成为 Java 中的装箱类型 Boolean。这一切都是交由编译器来完成,我们无需关心。var isFirst: Boolean = truevar isSecond: Boole...

2019-03-13 17:04:00 301

原创 Flutter完整开发实战详解(六、 深入Widget原理)

作为系列文章的第六篇,本篇主要在前文的探索下,针对描述一下 Widget 中的一些有意思的原理。前文:一、Dart语言和Flutter基础 二、 快速开发实战篇 三、 打包与填坑篇 四、Redux、主题、国际化) 五、 深入探索首先我们需要明白,Widget 是什么?这里有一个“总所周知”的答就是:Widget并不真正的渲染对象。是的,事实上在 Flutter 中渲染...

2019-03-13 16:53:14 177

原创 Android Volley 源码解析(三),图片加载的实现

前言在上一篇文章中,我们一起深入探究了 Volley 的缓存机制,通过源码分析对缓存的工作原理进行了了解,这篇文章将带大家一起探究「Volley 图片加载的实现」,图片加载跟缓存还是有比较紧密的联系的,建议大家先去看下Android Volley 源码解析(二),探究缓存机制这是 Volley 源码解析系列的最后一篇文章,今天我们通过以基本用法和源码分析相结合的方式来进行,当然本文的源码还...

2019-03-11 21:44:42 71

原创 Android Volley 源码解析(二),探究缓存机制

前言在上一篇文章中,带大家阅读了 Volley 网络请求的执行流程,算是对 Volley 有了一个比较清晰的认识,从这篇文章开始,我们开始针对 Volley 的某个功能进行深入地分析,慢慢将 Volley 的各项功能进行全面把握。我们先从缓存这一块的内容开始入手,不过今天的缓存分析是是建立在上一篇源码分析的基础上的,还没有看过上一篇文章的朋友,建议先去阅读Android Volley 源码...

2019-03-11 21:27:42 139

原创 Android Volley 源码解析(一),网络请求的执行流程

前言花了好几天,重新研究了 Volley 的源码实现,比起之前又有了一番新的体会,啃源码真的是一件让人纠结的事情,阅读优秀的源码,特别是难度相对较大的源码,一旦陷入代码细节或者情绪一烦躁,很容易让人奔溃,但是真正的啃下来,收获真的很大。从优秀的代码中学习优秀的编程思想以及良好的代码设计和代码风格是一个非常好的方法,这次通读了 Volley 的源码之后,对于 Volley 的代码质量和拓展性深感...

2019-03-11 21:19:18 144

原创 从源码角度看JNI

简介Android NDK开发中,常常因为效率、安全等原因,需要借助JNI的机制调用到Native环境中进行c/cpp操作,常见的Java层需要调用Native层的代码时的标准流程是这样的:调用loadLibrary,依靠dlxxx系列方法加载动态链接库,然后调用库中的JNI_Onload方法,解析并保存头文件中的符号表 JAVA层调用事先声明的native方法 虚拟机通过预先加载的符...

2019-03-11 21:05:49 220

原创 从源码角度看Handler

简介Handler这套线程异步通信框架在Android中的地位是不亚于Binder的,因为其基础设计简单、涉及的知识面广、业务使用场景多等原因,十分适合应用层的初中级的工程师进行深入学习这篇文章中我将分析Handler核心功能的源码,分析将贯穿着framework, native和kernel的知识点:Handler发送异步消息原理 Looper派发消息原理 消息分割栏的原理与视图...

2019-03-11 20:56:28 136

原创 Android 开源框架 OkHttp 原理剖析

安卓开发领域,很多重要的问题都有了很好的开源解决方案,例如网络请求 OkHttp + Retrofit 简直就是不二之选。“我们不重复造轮子不表示我们不需要知道轮子该怎么造及如何更好的造!,在用了这些好轮子将近两年之后,现在是时候拆开轮子一探究竟了。1,整体思路从使用方法出发,首先是怎么使用,其次是我们使用的功能在内部是如何实现的,实现方案上有什么技巧,有什么范式。全文基本上是对 OkHt...

2019-03-11 17:04:19 175

原创 多家一线互联网公司Android面试题:小米+百度+360+美团【下】

前言前几篇更新了一些Android面试题上半部分,很多人说太简单了,那么接下来我们来更新下半部分,我们一起来看看,希望对大家都有所收获接下来,我会整理一些一线互联网公司的面试题,希望能在面试的时候帮助到大家【文末有彩蛋】1.什么情况导致oom-乐视-美团1)使用更加轻量的数据结构2)Android里面使用Enum3)Bitmap对象的内存占用4)更大的图片5)onDr...

2019-03-09 21:58:44 334

原创 详解 Android 中的 HandlerThread

HandlerThread是Android API提供的一个便捷的类,使用它我们可以快速的创建一个带有Looper的线程,有了Looper这个线程,我们又可以生成Handler,那么HandlerThread是什么,可以做什么呢,有哪些奇技淫巧可以被我们利用呢?实现原理在介绍原理之前,我们先使用普通的Thread来创建一个Handler,创建的过程大致如下:Handler mHand...

2019-03-09 21:32:30 152

原创 2019年百度Android面试题-公共技术点之 View 绘制流程

View 绘制机制1. View 树的绘图流程当 Activity 接收到焦点的时候,它会被请求绘制布局,该请求由 Android framework 处理.绘制是从根节点开始,对布局树进行 measure 和 draw。整个 View 树的绘图流程在ViewRoot.java类的performTraversals()函数展开,该函数所做 的工作可简单概况为是否需要重新计算视图大小(mea...

2019-03-09 20:52:37 145

原创 多家一线互联网公司Android面试题:小米+百度+360+美团

前言春节已经过去了一个月有余,又到了一年一度的跳槽找工作的时候了,相信很多认在这一段时间面试了很多公司确迟迟得不到心仪公司的offer接下来,我会整理一些一线互联网公司的面试题,希望能在面试的时候帮助到大家【文末有彩蛋】1.抽象类接口区别-360①默认的方法实现抽象类可以有默认的方法实现完全是抽象的。接口根本不存在方法的实现②实现子类使用extend...

2019-03-08 17:32:53 349

原创 Android性能优化之内存篇

性能优化一直是高级Android工程师必问的,这也往往涉及到对Java、JVM、Android运行机制、监控工具使用等全方位的知识点,是很好的面试方向。本篇会围绕Android与Java的性能优化专项之内存展开并深入。内存是Android运行性能至关重要的一项指标,每个进程能使用的内存是有限的。不合理的使用内存会导致频繁的GC、甚至发生OOM,过多GC会导致App卡顿,而内存泄漏或者内存抖...

2019-03-06 17:54:29 160

原创 Flutter完整开发实战详解(六、 深入Widget原理)

作为系列文章的第六篇,本篇主要在前文的探索下,针对描述一下 Widget 中的一些有意思的原理。前文:一、Dart语言和Flutter基础 二、 快速开发实战篇 三、 打包与填坑篇 四、Redux、主题、国际化) 五、 深入探索首先我们需要明白,Widget 是什么?这里有一个“总所周知”的答就是:Widget并不真正的渲染对象。是的,事实上在 Flutter 中渲染...

2019-03-06 17:43:30 328

原创 Flutter完整开发实战详解(五、 深入探索)

作为系列文章的第五篇,本篇主要探索下 Flutter 中的一些有趣原理,帮助我们更好的去理解和开发。前文:一、Dart语言和Flutter基础 二、 快速开发实战篇 三、 打包与填坑篇 四、Redux、主题、国际化)一、WidgetsFlutterBinding这是一个胶水类。1、Mixins混入其中( ̄. ̄)!是的,Flutter 使用的是 Dart 支持 ...

2019-03-06 17:41:49 301

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除