Mark Xu 的博客

记录精彩的程序人生

2018 年终总结

永远要保持清醒自己想要的是什么。时间总是你想象不到的快,还有两天 2018 年就要结束了,到今天为止,自己已经毕业参加工作 4 年多,写代码 2 年多了。此时,翻看 2017 年的年终总结,看着当时给自己立下的 flag,真是啪啪打脸的时刻啊,虽然脸被打的很疼,但还是要清楚自己几斤几两,认清自己所处的水平,永远要保持清醒自己想要的是什么。每年写年终总结之前,都习惯看看大佬们的年终总结,才发现已经很久没有打开郭霖大佬的

SonarQube 代码扫描实战

本篇博客主要记录使用 SonarQube 进行代码静态扫描实战过程。环境安装在 Jenkins 中项目已经可以跑通的前提下,引入 SonarQube 代码静态扫描,需要安装 SonarQubeServer(最新版本 7.3)、SonarScanner(最新版本 3.2.0.1227)、SonarQubeScannerforJenkins 插件。整体安装流程较为简单,但是因环境差异会产生各种小问题,Google 即可。So

再谈 MVC、MVP 与 MVVM

最近在主导公司的 Android 客户端架构演进工作,我们再次来认识下 MVC、MVP 与 MVVM。MVC 模式概述 MVC 基于 Model-View-Controller,即模型 - 视图 - 控制器的架构模式进行设计。模型对象:存储着优雅的数据和业务逻辑,模型类通常用来映射与应用相关的一些事物,如用户、商店里的商品、服务器上的图片或者一段电视节目。模型对象不关心用户界面,它存在的唯一目的就是存储和管理应用数据。应用的

Android 图片加载(二)-- Bitmap 高效加载

上一章中,我们介绍了图片的基本知识,接下来我们看看在 Android 中如何高效加载图片呢。在 Android 中,我们使用 Bitmap 对象来描述我们前面所说的图片,Bitmap 本身的含义为:位图,我们用它来处理图片。那么 Bitmap 对象要如何得到呢?Bitmap 对象 Android 系统 API 中提供了一个工厂类 BitmapFactory,用于从文件系统、资源、输入流以及字节数组中加载出一个 Bitmap 对象。p

Android 图片加载(一)-- 图片基础知识

图片加载在 Android 应用开发中,也算是很重要的一块了。移动设备的内存都是很宝贵的,而图片又是内存占用大户,所以如何优化图片加载,优化 App 内存占用,是一个 Android 开发工程师的基本必备技能了。最近准备写一系列图片加载相关的文章,查漏补缺,提升自己的开发实力。图片的本质题图是台风 “山竹” 来临前一天拍摄的,晴空万里,五彩缤纷,异常宁静。这张图使用手上的红米手机拍摄,原图尺寸为 4000*3000p

ViewStub 源码分析

写项目的过程中发现,在需要根据适当条件进行相应 UI 展示时,代码中充斥了 setVisibility 相关的代码,相当混乱。我们可以使用 ViewStub 来简化相应的逻辑,并且 ViewStub 大小为 0,运行时才进行懒加载,所以性能上也有一定优势。本文对 ViewStub 的源码进行分析,以使用的更得心应手!简单使用 ViewStub 的使用很简单,在布局文件中像引入其他控件一样引入 ViewStub:<ViewStu

记一次小米 note3 开机黑屏处理过程

从第一次购买小米的蓝牙音箱,到后面自己以及推荐家人购买小米、红米手机,再到购买路由器、智能摄像头、耳机这些周边产品,自己也慢慢成为了一个米粉。今天下班后,女朋友说她的小米 note3 黑屏死机了,重启无效。顿时对小米略感失望,两千块钱的手机刚用半年而已。想到送到售后八九不离十又是给刷机处理,自己又不想丢失手机内的数据,所以决定自己尝试解决,经过半个多小时成功解决。症状首先,说明下手机的症状:开机后显示正

随笔小记(一)

最近状态有点不够平稳。一个月前吧,有打算转 Java 后台的想法的,所以最近自己学习了 SQL、Servlet、Spring、JFinal 的相关知识,水平大概到了能读懂、修改公司的业务项目。转后台的初衷有两个,一个是感觉后台工资会略高于前端,另一个是感觉职业发展方向会更好些。当然这两天还是决定放弃这个决定了。阅读公司后台的源码以及产品文档发现,做的更多的还是业务逻辑以及 CURD,中小型创业公司应该都是这种

Dagger2 学习总结及源码浅析

Dagger2 是一个解决 Android 或 Java 的依赖注入类库,关于 Dagger2 的教程网上已经很多了,此处推荐《Dagger2 入门, 以初学者角度》和《Android:dagger2 让你爱不释手 - 基础依赖注入框架篇》这两篇,对照教程可以基本学会使用方法。本文算是我自己在学习 Dagger2 过程中的一个精华汇总吧,同时外加实现源码分析。学习总结总览 1、Java 中万物皆对象,每一个对象可以拥有很多成员变量

公司项目代码优化总结

公司的 Android 端项目已经历时五年有余了,经历了多名开发者编写,所以难免风格各异。我在接手项目后,在实现版本迭代的同时,也顺手对以前的代码做了部分优化。本文总结了在过程中遇到的一些问题,归纳为性能,视图,维护等几个方面。当然,有些问题见仁见智,欢迎讨论!性能 ArrayMap、SparseArray 替代 HashMapHashMap 是 Java 中的常用集合类型,大家都非常的熟悉。Android 平台上,

避免空指针和下标越界的方案总结

最近处理了一批公司项目的线上 bug,其中以空指针异常和下标越界占大多数,本文结合项目中遇到的各种空指针和越界问题,总结了产生的原因,及如何编码才能更大程度上减少空指针和下标越界的发生。空指针空指针异常出现的原因可能的原因有如下几个:对象没有初始化就进行操作对象已经初始化过,但是被回收或者手动置为 null 进程被杀死后静态变量没有初始化 API 返回脏数据,解析出的对象状态异常有效避免空指针异常的编码习惯 1

2018 面试有感

五一前夕,入职了广州的新公司,2018 年面试也暂告一个段落,今年面试经历颇有感慨,记录总结以此共勉。总结(前公司)之前在泉州从事 Android 开发工作,整个城市的 Android 开发职位以及人员数量都很少。当时自己的开发水平尚处于初始阶段,在经历了几家小公司的面试后,入职了上家公司,以安防业务为主。特殊的业务性质也造成了 App 运行的环境特殊性,我们开发的 App 的目标设备都是配置较低、系统版本低、屏幕尺

Java 学习之类的初始化和实例化

昨天参加了来广州之后的第一场面试,在笔试中考察了很多关于类的初始化和实例化相关的问题,之前在面试题搜集阶段有总结过该问题,但自己没有亲自敲写代码,印象不够深刻,今天自己总结下。对象的创建昨天笔试第一题就是问是否只有 new 关键字可以创建对象,当时我只想到了还有反射,下来一查发现,除了反射外,还可以通过 clone、反序列化的方式创建对象。反射创建对象 1、使用 Class 类的 newInstance 方法 2、使

ButterKnife 源码分析

ButterKnife 框架是我们日常使用最频繁的框架之一,本文对 ButterKnife8.8.1 版本进行源码分析。整体流程编写代码时对目标元素进行注解编译时注解处理器会扫描注解,并通过 JavaPoet 自动生成 Java 文件调用 ButterKnife.bind() 方法时,会通过反射拿到之前为目标类生成的 TargetClassName_ViewBinding 类,并调用其构造方法,完成绑定具体分析源码组成 B

2017 年终总结

今天是 2017 年的圣诞节,晚上开始写 2017 年的年终总结和 2018 年的计划。每老一岁,就感觉一年的时间过的更快了一些。今年收获很多,也有很多后悔的事情。现在回头翻看去年今日所写的年终总结,有一部分做到了,也有一些没做到。下面开始回顾和展望,加油!2017 年总结学习自己觉得今年做的最好的,就是在学习方面坚持下了写博客和写 wiki 的习惯,今年共完成 23 篇博客以及 23 种类目的 wiki。现在的博客质量虽然一

IC 卡号类别与转换

关于 IC 卡 10 位卡号转换问题,今年已经计算过好几遍了,今天要用到时发现又捋不清了,特此记录下来。重点各个厂家读卡器译码格式不同,但是读出的二进制或十六进制结果一定是唯一的,也就是原始卡号,这一点很关键。不同的读卡方式的区别在于,从十六进制卡数据中,截取一段数据转换为十进制,再将多次截取转换好的数据进行拼接。各个厂家的读卡器输出都不太一样,但基本上是按一定的标准输出,下面我们来看看常见的读卡格式。常见

Retrofit 使用总结及源码分析

本篇文章对 Retrofit 用法进行简单记录,并进行相关的源码分析。整体说明 Retrofit 对网络请求接口进行了封装,实际执行网络请求的依然是 OkHttp。Retrofit 接口层实际是对 OkHttp 中 Request 的封装,采用注解的形式来描述网络请求参数。Retrofit 使用在学习 Retrofit 使用之前我们先回顾下 OKHttp 的工作方式,一个标准的 OkHttp 请求格式为 mClient.newCall

OkHttp3 源码分析(一)

本篇文章对 OkHttp3 的源码进行分析,学习其设计思想。OkHttpClient 首先从 OkHttpClient 的构建说起。由官方文档可知,在绝大多数 App 中,我们都应该只拥有一个 OkHttpClient 对象,这样所有的 Http 请求可以共用 Response 缓存、共用线程池以及共用连接池,达到节省延迟和内存的目的。关于 OkHttpClient 我们暂时只关注两点:Builder 模式和 Call 接口。Buil

Android 手机屏幕那些事儿

最近公司的 Android 设备准备进行硬件升级,谈及屏幕时,大家对于相关的一些知识点具有不同的认知。因此我搜集了互联网上关于 Android 手机屏幕的相关资料,总结、记录、分享于此。分辨率屏幕尺寸屏幕尺寸指屏幕对角线的长度,单位:英寸 1 英寸 = 2.54 厘米屏幕比例屏幕比例为手机屏幕的纵横比(高宽比)屏幕比例值等于分辨率比例值,即 16/9=2560/1440 当今智能手机主流屏幕比例为 16:9 约等于 1.777