自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

老梁的专栏

一个真诚的程序员

  • 博客(37)
  • 资源 (8)
  • 收藏
  • 关注

原创 Kotlin 教程之「可见修饰符」

可见性修饰符类、对象、接口、构造器、函数、属性以及它们的 setter 都有 可见性修饰符。(getter 的可见性与属性一致)。Kotlin 中有四个可见性修饰符:private、protected、internal 和 public。默认的可见性(如果没有显示指明修饰符)是 public。下面会解释修饰符如何作用于不同类型的声明域(different types of declaring ...

2019-12-13 16:05:24 717

原创 Kotlin 教程之「接口」

接口Kotlin 的接口非常类似于 Java8。可以包含抽象方法的声明以及方法的实现。接口与抽象类的区别是不能存储状态。接口可以有属性,但是必须声明为抽象类型或者实现了访问器。接口通过关键字 interface 来定义:interface MyInterface { fun bar() fun foo() { // optional body }}...

2019-12-13 16:04:06 759

原创 Kotlin 教程之「属性和字段」

属性和字段声明属性Kotlin 中的类可以拥有属性。var 表示可变,val 表示只读。class Address { var name: String = ... var street: String = ... var city: String = ... var state: String = ... var zip: String = ......

2019-12-13 16:01:15 743

原创 Kotlin 教程之「类和继承」

类和继承类Kotlin 的类使用关键字 class 来定义:class Invoice {}类的声明包含:类名、类头(指明类型参数、首要构造器等)、类体(由花括号包裹)。类头和类体都是可选的;如果没有类体,花括号也可以省略。class Empty构造器Kotlin 的一个类可以有一个首要构造器和多个次要构造器。首要构造器是类头的一部分:位于类名(以及可选类型参数)之后。cla...

2019-12-13 16:00:33 468

原创 用命令行将远程服务器的 MySQL 表数据导出到本地

第一步:root 身份 ssh 登录到远程机器ssh root@server_ip_address第二步:远程机器上进入 MySQL 控制台mysql -u root -p第三步:选择数据库use your_db;第四步:执行导出select * from your_table_name into outfile 'file.csv' FIELDS TERMINATED BY ...

2019-12-06 00:35:35 3856

原创 Kotlin 教程之「返回和跳转」

返回和跳转Kotlin 支持三个结构化的跳转表达式:return 默认返回就近的封闭(enclosing)函数或者匿名函数break 中断就近的封闭循环continue 继续执行就近封闭循环的下一步操作以上表达式可作为更大表达式的一部分:val s = person.name ?: return以上表达式的类型是 Nothing。break &am...

2019-12-05 17:19:44 1711

原创 Kotlin 教程之「控制流」

控制流:if, when, for, whileif 表达式Kotlin 的 if 是一个表达式,也就是说,它可以返回一个值。因此三元操作符(condition ? then : else)就失去用武之地了,因为普通 if 就可以担当此任。// Traditional usagevar max = aif (a < b) max = b// With elsevar max:...

2019-12-05 17:17:51 473

原创 Kotlin 教程之「包和导入」

源文件的开头可以是 package 的声明:package foo.barfun baz() {}class Goo {}// ...源文件的所有的内容(例如类和函数)都会包含在所声明的 package 中。所以,上例中 baz() 的完整名称是 foo.bar.baz,Goo 是 foo.bar.Goo。package 没有指明的情况下,文件的内容归属于一个无名的“默认” p...

2019-12-05 17:16:15 1372

原创 100行Android代码自定义一个流式布局-FlowLayout

通过不到100行代码,模仿css3的flexbox功能,实现一个Android的流式布局。同时介绍了如何把打出来的aar包upload到jCenter。

2019-12-05 17:07:37 18930 6

原创 Android中如何优雅地自定义一个View

Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到一些坑,我把自己遇到的一些问题和解决方法总结一下,希望对广大码友们有所帮助。 用xml定义Layout时,Root element 最好使用merge当我们需要继承一个布局比较复杂的ViewGroup(比较多的是LinearLayout、RelativeLayout)时,通常会用xml

2019-12-05 17:07:35 15452 17

原创 为ViewPager添加一个indicator

天は二物を与えずViewPager是Android提供的一个良心组件,有了它分分钟就可以实现了一个水平滑动的分页功能,其中用ViewPager来全屏展示图片是一个比较经典的使用场景,先来看一下效果图:在每个Page的底部中间位置有一排圆圈,实心的圆圈用来指示当前显示的图片,它会随着手指滑动而移动,我们可以称之为 ViewPager 的 indicator。实现这个功能也比较简单,首先定义一个水平方

2019-12-05 17:07:27 5169 4

原创 我的Mac开发环境

本周开始,正式开始iOS开发,把 air 换成了 pro,真是有一种鸟枪换炮的感觉,从此屏幕再无颗粒感,幸福指数飙升。正好趁着换电脑,把配置开发环境的过程纪录下来,后面再换新电脑就可以迅速地搞定,不必浪费时间四处搜索。工具类oh-my-zsh - bash工具alfredMou - Markdown编辑器 WizNote钉钉SublimeGIMP开发类Android Studio

2019-12-05 17:07:23 4375 3

原创 Fresco源码解析 - 本地编译

Fresco 是 facebook 在今年的 F8 大会上宣布开源的一个用于加载图片的库,它不仅支持多种图片文件格式,而且由于使用了pinned purgeables 技术,使得大图加载过程中产生OOM的概率大大降低。

2019-12-05 17:07:15 8496 2

原创 Fresco源码解析 - Hierarchy / View / Controller

Fresco是一个MVC模型,由三大组件构成,M 所对应的 `DraweeHierarchy` 是一个有层次结构的数据结构,`DraweeView` 用来显示位于 `DraweeHierarchy` 最顶层的图像(*top level drawable*),`DraweeController` 则用来控制 `DraweeHierarchy` 的顶层图像是哪一个。

2019-12-05 17:07:12 10720 1

原创 Fresco源码解析 - DraweeView

DraweeView 是Fresco的三大组件(Hierarchy、Controller、View) 之一,作为MVC模式中的 View,主要负责显示由 Hierarchy 提供的数据(placeholder、actual image、progress drawable等),Controller 作为幕后,负责获取数据。

2019-12-05 17:07:05 29161

原创 Android 中 View 炸裂特效的实现分析

前几天微博上被一个很优秀的 Android 开源组件刷屏了 - ExplosionField,效果非常酷炫,有点类似 MIUI 卸载 APP 时的动画。ExplosionField 不但效果很拉风,代码写得也相当好,让人忍不住要拿来好好读一下。

2019-12-05 17:06:59 18751 27

原创 利用 Android Annotations 来玩玩契约编程

本文主要介绍了使用 Annotations 的一些好处以及博主对契约变成的粗浅认识。

2019-12-05 17:06:54 6347 7

原创 怎样用 Android Annotations 写出高性能代码

上一篇博文中简单介绍了 Android Annotations 的基本用法,顺便扯了一下概念 - 契约编程,阅读量少的可怜,看来并没有多少人对此感兴趣,今天再来一篇,介绍几个稍微高级点的用法,我就不信弄不出一个大新闻。本篇将要介绍的几个也许并不常用,但是逼格是有保证的。

2019-12-05 17:06:39 12807 7

原创 怎样在静态方法中使用 synchronized

synchronized 的实现方式synchronized 的类型可以分为两种:synchronized methodsynchronized block两者的实现方式是不一样的,jvm 规范中写道,编译后的 synchronized method 会有一个 ACC_SYNCHRONIZED 的 flag,也就是说当 jvm 的方法调用指令(the method invocation ins

2019-12-05 17:06:35 7551 2

原创 富文本编辑器 - RichEditor

基本功能RichEditor 是一个继承自 WebView 的自定义 view,枚举类型 Type 定了它所支持的排版格式:public enum Type { BOLD, ITALIC, SUBSCRIPT, SUPERSCRIPT, STRIKETHROUGH, UNDERLINE, H1, H2, H3, H4, H5, H6}首先在构造函数中

2019-12-05 17:06:27 11450 5

原创 Fresco 源码解析 - 利用 @DoNotSkip 来防止混淆

我们都知道,如果打开了混淆开关,代码 release 阶段会根据 proguard 规则进行混淆,但是有些实体类(例如 json 字符串对应的 model)需要进行序列化、反序列化,而序列化工具(例如 Gson、fastjson)是利用反射来一一对应 json 串的 key 和实体类的成员变量。例如,我们定义一个 POJO 类型的 User 实体类。public class User { pub

2019-12-05 17:01:16 8204

原创 SoftReference 为什么被 Android “放弃”

JDK 中除了默认的 Strong Reference 之外,还有三个其他的 Reference:WeakReferenceSoftReferencePhantomReference他们都是为了更高效地利用 Heap。WeakReference如果一个变量的 Reference 只剩下 WeakReference,那么 GC 会毫不留情地把这个变量回收掉。也就是说,WeakReference

2019-12-05 17:01:13 5462 2

原创 引入三方包导致 Theme 失效

引入一个三方包之后导致 App 主题失效,定位了一个下午,做个记录。

2019-12-05 17:01:08 2558 1

原创 ApplicationId 与 PackageName 的区别

ApplicationId 与 PackageName 的区别

2019-12-05 17:01:01 14128 2

原创 Retrofit + RxAndroid 实践总结

在接入 Retrofit + RxAndroid 之前,项目代码中主要存在如下问题:服务器 API 的定义方式不一致,有的集中定义,有的定义在业务代码中,没有分类不便于维护。Request / Response / API 三者没有对应关系(Request 参数使用 Map 传递,Response 返回 JSON 数据)每次都需要传递 access_token 给需要验证登录的 APIRes

2019-12-05 17:00:54 4728 5

原创 写 Gradle 插件的一点经验

本着简单易用的原则,参考 android-resource-remover 写了一个删除无用资源文件的 Gradle 插件 - clean-unused-resources-gradle-plugin,结果微博发出来不到10分钟,陈启超就告诉我 AS2.0+ 已经提供了此功能。天哪,为了纪念这个短命无用的轮子,只好写篇博客,把造轮子的过程记录下来,也算对别人有点用处。官方文档说了,自定义 Gradl

2019-12-05 17:00:47 2649

原创 Fresco源码解析 - 初始化过程分析

使用Fresco之前,一定先要进行初始化,一般初始化的工作会在Application.onCreate()完成,当然也可以在使用Drawee之前完成。Fresco本身提供了两种初始化方式,一种是使用使用默认配置初始化,另一种是使用用户自定义配置。如下代码是Fresco提供的两个初始化方法。第一个只需要提供一个Context参数,第二个还需要提供 ImagePipeline 的配置实例 - Image

2019-12-05 17:00:33 13185 1

原创 Fresco源码解析 - DataSource怎样存储数据

datasource是一个独立的 package,与FB导入的guava包都在同一个工程内 - fbcore。datasource的类关系比较简单,一张类图基本就可以描述清楚它们间的关系。DataSource 是一个 interface, 功能与JDK中的Future类似,但是相比于Future,它的先进之处则在于 不仅仅只生产一个单一的结果,而是能够提供系列结果。 Unlike Futures

2019-12-05 17:00:30 5882

原创 Fresco源码解析 - 创建一个ImagePipeline(一)

在Fresco源码解析 - 初始化过程分析章节中,我们分析了Fresco的初始化过程,两个initialize方法中都用到了 ImagePipelineFactory类。ImagePipelineFactory.initialize(context);会创建一个所有参数都使用默认值的ImagePipelineConfig来初始化ImagePipeline。ImagePipelineFactory.i

2019-12-05 17:00:23 11787 5

原创 如何获取 Android 设备的CPU核数、时钟频率以及内存大小

从 Facebook 的开源代码(Device Year Class)抽取了一些 Android 编码中的常用功能 - 获取 CPU 核数、时钟频率、内存大小。

2019-12-05 17:00:15 14675 5

原创 全面介绍Android的MVVM框架 - 数据绑定

本教程是跟着 Data Binding Guide 学习过程中得出的一些实践经验,同时修改了官方教程的一些错误,每一个知识点都有对应的源码,争取做到实践与理论相结合。Data Binding 解决了 Android UI 编程中的一个痛点,官方原生支持 MVVM 模型可以让我们在不改变既有代码框架的前提下,非常容易地使用这些新特性。

2019-12-05 17:00:09 74908 18

原创 Android Data Binding 的一个bug

跟着官方教程学习数据绑定的用法,功能确实非常强大,这是 Android 向 MVVM 迈出的一大步,也是 Native 的开发方式逐渐向 Web 靠拢的一小步。其中一个绑定方式是直接使用资源数据,例如:android:padding="@{large? @dimen/largePadding : @dimen/smallPadding}"官方教程截图:完整版的布局文件如下:<layout xmlns

2019-12-05 17:00:00 11159 3

原创 从Android的角度看Storyboard

由于先入为主的原因,Android 开发者很容易搞混某些 iOS 术语,导致理解上出现偏差。举个栗子,Objective-C 中有一个关键词 interface,虽然 Java中也有 interface,但两者的含义是完全不同的,除此之外,还有很多概念相同,但是叫法不同的术语,比如 Closure(闭包) 在 Objective-C 中称作 Block。如果在学习过程中能够注意到这些不同点,不仅有助

2019-12-05 16:59:59 3627

原创 图解 Retrofit - ServiceMethod

通过 Retrofit + RxAndroid 实践总结,我们已经了解到了 Retrofit 的基本用法,为了知其所以然,我们以图解加源码的方式从 Service Method 入手,逐步解析 Retrofit。首先以官方网站的示例代码为例,看一下一个 Service Method 的组成部分。ServiceMethod 使用了 Builder 模式,先来看 ServiceMethod.Builde

2019-12-05 16:59:24 2476

原创 Kotlin实战之Fuel的高阶函数

Fuel 是一个用 Kotlin 写的网络库,与 OkHttp 相比较,它的代码结构比较简单,但是它的巧妙之处在于充分利用了 Kotlin 的语言特性,所以代码看上去干净利落。OkHttp 使用了一个 interceptor chain 来实现拦截器的串联调用,由于 Java 语言( JDK ≤ 7)本身的局限性,所以实现代码比较臃肿,可读性也不友好。当然,RxJava 再加上 retrola...

2019-12-05 16:58:52 1270

原创 Kotlin 教程之「基本类型」

Kotlin 中,我们可以调用任何变量的成员函数和属性,从这个角度来说,一切皆对象。某些类型可以有特殊的内部表现 - 例如,数字、字符和布尔型在运行时可以表现为基础类型(primitive types),但是对用户来说,他们看上去就是是普通的类。这一章节主要描述 Kotlin 的基本类型:数字、字符、布尔、数组和字符串。数值Kotlin 处理数字的方式与 Java 类似,但不是完全一致。例如...

2019-12-05 10:10:49 293

原创 Android 架构组件设计思想总结

原文地址:https://mp.weixin.qq.com/s/-2z7lAGQ3GeSqFfkPGPWNA转载已获授权Google 为帮助 Android 开发者更快更好地开发 App,推出了一系列组件,这些组件被打包成一个整体,叫作 Android Jetpack,其包含的组件如下图所示:旧 support 包也被整合进了 Jetpack,例如上图 Foundation 模块的 ...

2019-12-04 16:54:20 447

设计模式 可复用面向对象软件的基础

Gof 的经典之作,软件设计师必读,设计模式 面向对象

2009-08-25

UCOS-II内核调度分析(0331版本)

uCOS进阶教程,内容深入浅出,很好很实用。

2009-07-23

uCOSII中文教程

嵌入式学习很好资料。 uCOS操作系统学习的良师益友

2009-07-23

基于OpenGL的贪吃蛇小游戏

基于OpenGL,利用MFC9.0开发的贪吃蛇小游戏 贪吃蛇 游戏

2009-06-19

实用分形图形学 计算机图形学

其中计算机分形图形学中讲述的部分在里面都用数学定理形式给出证明。数学理论代码

2009-05-26

写好代码的是个秘诀 程序员开发宝典

一部很好的编码规范介绍以及如何在平时的编码中养成良好的编码习惯

2009-04-26

自己动手写操作系统 操作系统 LINUX

操作系统,LINUX 自己动手写,名师之作,很好很强大。

2009-04-26

用MFC实现手机串口通信

MFC 实现了通过电脑终端向手机发送AT指令来操作手机各种功能,增加了自动检测端口功能。

2009-04-03

空空如也

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

TA关注的人

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