自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不惜留恋_

活着不是给别人看的,做自己~~

原创 shell case结构的多分支执行

通常,我们使用 case 结构是不同的分支执行不同的命令,例如 #!/bin/bash var=a case "$var" in a) echo "case a" ;; b) echo "case b" ;; c...

2020-01-20 17:58:30

阅读数 29

评论数 0

原创 关于shell的for结构的一些小技巧

基本使用 最直观的 for 语法如下 for name in [in words ...]; do commands done 我们可以利用 for 语法做一个遍历,例如 #!/bin/bash for i in {1..10}; do echo $i done 这样看起来不是很直观,因...

2020-01-20 16:21:53

阅读数 9

评论数 0

原创 bash的算术表达式结构:解决一切算术表达式的烦恼

在使用 shell 的 test 命令处理算术条件表达式时,总让我觉得这个命令是个垃圾。例如 #!/bin/bash var=5 if [ "$var" -gt 0 -a "$var" -lt 10 ]; then echo "var is $...

2020-01-20 15:38:16

阅读数 9

评论数 0

原创 关于shell的test命令格式的各种疑惑

test 命令的空格 shell 的 test 命令用来测试一个表达式,例如 #!/bin/bash if test -n $1; then echo "\$1 = $1" fi 但是这种形式很丑陋,我们习惯在 if 语句后使用括号来执行判断语句,因此 test 命令有一...

2020-01-20 14:32:53

阅读数 3

评论数 0

原创 getopts命令解析shell脚本选项

我们在命令行操作命令的时候,经常会带一些选项和参数来改变命令的行为。那么对于一个shell脚本,如果想利用选项和参数的功能,那么该如何解析它们呢? 位置参数 在执行shell脚本的时候,位置参数(positional parameters)会被赋值为shell脚本的参数。我们可以通过 ${N} 来...

2020-01-20 12:51:12

阅读数 3

评论数 0

原创 Shell 重定向

当命令被执行时,会打开三个文件描述符,标准输入,标准输出,标准错误。标准输入默认来自键盘,标准输出和标准错误默认为屏幕。我我们可以利用重定向功能来改变命令执行时的标准输入、标准输出和标准错误。 重定向标准输入 重定向标准输入语法如下 [n]<file 它表示在文件描述符 n 上打开文件 f...

2020-01-15 17:47:25

阅读数 36

评论数 0

原创 SystemUI之StatusBar通知图标控制分析

StatusBar的创建与图标控制 分析了状态栏上系统图标区图标的控制流程,本文承接上文,分析状态栏上通知区图标的控制流程。 初始化通知图标区 由前文可知,状态栏视图的创建是在 StatusBar#makeStatusBarView() 中。同时,通知图标区的初始化也是在这里 protected ...

2020-01-10 13:58:21

阅读数 34

评论数 0

原创 SystemUI之StatusBar的创建与图标控制

SystemUI 包括很多部分,有顶部的状态栏,底部的导航栏,下拉通知面板,锁屏,等等。本文来分析状态栏的创建,以及状态栏上系统图标区图标的控制流程。 本文是基于Android 9.0源码。 创建SystemUI根视图 SystemUI 的启动入口是 StatusBar#start() ,在这...

2020-01-08 16:13:24

阅读数 41

评论数 0

原创 Linux 文件权限

我们通常所说的文件权限,其实说的是用户对文件的权限。它由文件模式位( file mode bits )控制,并且由两部分组成 文件权限位( file permission bits),它控制这普通的访问权限,例如读,写,执行权限。 特殊模式位( special mode bits ),它由设置用...

2020-01-03 17:00:51

阅读数 26

评论数 0

原创 Linux sort 命令

默认排序方式 现有如下文本 $ cat hard-sort.txt 3 1234 6 Adb 85 Abc aAb aab 现在我想用 sort 命令对这些行进行排序 $ sort hard-sort.txt 3 1234 6 85 Abc Adb aAb aab 这个排序结果似乎是杂...

2019-12-29 16:51:03

阅读数 223

评论数 2

原创 Shell echo 命令

基本使用 echo 命令把参数输出到标准输出,例如 $ echo hello world hello world hello 和 world 都是 echo 命令的参数,echo 命令它们都输出到标准输出。 -n 选项 echo命令有一个特性,它不仅会把参数输出到标准输出,还会输出一个换行符。例...

2019-12-27 15:04:36

阅读数 10

评论数 0

原创 了解 Linux 命令的信息

命令分类 命令有四种类型 可执行程序。例如find命令,它路径为/usr/bin/find。 shell内置命令。例如cd命令。 shell函数。 别名。例如在Ubuntu中,ls是ls --color=auto的别名。 识别命令 命令有四种分类,有时候需要知道命令的类型而做出不同的动作,例如...

2019-12-26 13:31:08

阅读数 14

评论数 0

原创 Android MTP 实现框架分析

MTP简介 MTP(Media Transfer Protocol)是PTP(Picture Transfer Protocol)的扩展,当PC端(Windows, Mac, Linux)与手机通过USB的MTP模式进连接的时候,在PC端是可以看到手机存储中的文件的,然而这个文件都只是手机存储中文...

2019-05-09 18:46:36

阅读数 727

评论数 0

原创 Andrid MTP之UsbService分析

UsbService

2019-05-09 18:46:21

阅读数 413

评论数 0

原创 源码剖析: Notification的发送

NotificationManagerService启动 在system_server进程中,启动了NotificationManagerService frameworks/base/services/java/com/android/server/SystemServer.java priva...

2019-05-09 18:06:38

阅读数 181

评论数 0

原创 Android音频焦点处理

概要 Android系统允许多个应用同时播放音频,这种特性有利有弊。例如当我们正在听音乐的时候突然点开了一个视频,如果我们发现音乐的声音和视频的的声音混合了在一起,这显然让我们非常不爽。而如果我们在播放音乐的时候,突然来了一条信息,这个时候,我们既希望能听到短信的提示音,又不希望音乐此刻停止,而是...

2018-12-07 17:20:14

阅读数 2844

评论数 0

原创 实现RecyclerView索引

概要 对于列表控制,在 RecyclerView 出现之前使用的是 ListView, 在为 ListView 实现索引的时候,大致有两种方式。 写一个类,继承自 ListView,重写 draw() 方法来绘制索引,然后利用 onInterceptTouchEvent() 来截断事件,用...

2018-07-09 23:44:55

阅读数 690

评论数 1

原创 Okhttp 之 HTTP Cookie 实现

本文主要的目的是分析 Okhttp 如何实现 HTTP Cookie,而 Cookie 是在 BridgeInterceptor 中使用的,因此本文从 BridgeInterceptor 讲起。 BridgeInterceptor BridgeInterceptor 是用来为请求报文设置首...

2018-04-17 14:53:05

阅读数 2319

评论数 0

原创 Okhttp 之HTTP 缓存实现

以前学习 HTTP 的时候呢,都是从书本中学习概念,但是从来没有在服务器端和客户端去实践过。 作为移动开发人员呢,我觉得还是有必要了解HTTP在客户端的实现。这篇文章讲述的是 Okhttp 在缓存方面的实现,这需要你对 HTTP 缓存有个概要的认识,然后我们结合 Okhttp 源码来看看如何实现客...

2018-04-12 17:03:18

阅读数 132

评论数 0

原创 Okhttp 之 okio

本文是的前一篇文章 Okhttp IO 之 Segment &amp; SegmentPool 的基础上写的,如果你没看懂前面的文章,那么看本文会相当的吃力,因为很多关键的代码都是在前面这篇文章中剖析的。 ByteString okio 中添加一个类 ByteString,顾名思义就是...

2018-04-04 17:20:20

阅读数 2074

评论数 1

原创 Okhttp IO 之 Segment & SegmentPool

看本文前,我希望你对链表的操作有个基本的认识,否则你会看得比较痛苦,因为我不会解析链表的操作。 Segment 要想搞明白 okio 的运作机制,Segment 是首先要弄清楚的,Segment 是用作 okio包下的 Buffer 和 SegmentPool 的结点。 参数说明...

2018-04-03 18:00:14

阅读数 374

评论数 0

原创 Handler 必知必会

概要 Handler 封装了一套消息机制,用来发送和处理消息(Message),而它常常被用来更新 UI。 创建 public Handler() { this(null, false); } public Handler(Callback ...

2018-02-24 17:11:58

阅读数 130

评论数 0

原创 RecyclerView 的 FastScroller 绘制的源码分析

RecyclerView 以前一直被人诟病没有 FastScroller 的功能,然后网上出现了几种解决方法 继承 RecyclerView,重写 draw() 方法,绘制 FastScroller 单独自定义一个 View,然后传入 RecyclerView 作为参数。 第一种方法沿用了 Lis...

2017-11-23 17:13:05

阅读数 1321

评论数 0

原创 Material Design 之 Touch Feedback

目录目录 概要 设置触摸反馈 RippleDrawable 参考链接概要在 Materil Design(一下简称 MD ) 中,当用户与 UI 交互的时候,触摸反馈(Touch Feedback)可以在交互点提供一种及时的视觉确认效果。设置触摸反馈Button 在 MD 中默认就有一个反馈动画,...

2017-10-20 17:44:59

阅读数 375

评论数 0

原创 探究 ButterKnife 的注解处理以及代码生成

ButterKnifeButterKnife 是一个常用的第三方库,它在编译期间,使用注解处理器解析注解,并生成样板代码,从而达到给 Android views 绑定的效果,从而简化了我们写的一些样板代码。为了了解 ButterKnife 的原理,我自己模仿写了一个库,几乎可以以假乱真,当然,这个...

2017-09-05 11:15:23

阅读数 1631

评论数 0

原创 Java 8 之 Stream 操作符

前一篇文章 Java 8 之 Stream 的创建 对 Stream 特性以及如何创建 Stream 做了说明,这篇文章对 Stream 的操作符(方法) 进行探讨。filterStream 的 filter() 方法执行过滤操作Stream<T> filter(Predicate&l...

2017-08-30 18:24:49

阅读数 1342

评论数 0

原创 Java 8 之 Stream 的创建

StreamJava 8 中新增的特性旨在帮助程序员写出更好的代码,其中对核心类库的改进主要包括集合类的 API 和 新引入的流(Stream)。Stream 使程序员可以站在更高的抽象层次上对集合进行操作。Stream 实现机制外部迭代Java 8 之前,如果要操作一个集合中的元素,就需要遍历集...

2017-08-25 17:34:12

阅读数 823

评论数 0

原创 Android Transition Framework 源码分析

概要在 Android 4.4 的时候,引入了 Transition Framework ,其原理是利用属性动画,来实现 View 在不同布局的转换效果。在 Android 5.0 的时候 ,基于 Transition Framework 又引入了 Activity/Fragment Transi...

2017-07-20 18:15:46

阅读数 946

评论数 1

原创 Android Transition Framework 实战演练

俗话说,“光说不练假把式,光练不说傻把式,既说又练全把式”,继 Android Transition Framework 源码分析 的源码分析后,这篇文章会在应用层面上详解 Transition Framework。 老规矩,看看下要实现的效果图。概要Transition Framework 有两...

2017-07-16 18:28:01

阅读数 1059

评论数 0

原创 Linux 数据压缩与归档

在 windows 下,对于压缩这个概念,其实指的的数据压缩以及数据归档。数据压缩bzip2工具bzip2 工具要的文件是以 .bz2 结尾,在压缩大型的二进制文件领域非常流行。bzip2 软件包有以下几个工具: - bzip2:用来压缩文件 - bzcat:用来显示压缩的文本文件的内容 -...

2017-07-09 23:45:51

阅读数 333

评论数 0

原创 shell命令之mkdir

操作系统为 macOS 10.12.4 mkdir 是创建目录的命令。创建一级目录mkdir dir1如果dir1目录 已经存在,会提示目录已经存在创建多级目录mkdir -p dir1/dir2 如果目录 dir1 不存在,那么会创建 dir1 和 dir2 两个目录 如果目录 dir1 已经存...

2017-07-06 23:25:45

阅读数 11099

评论数 0

原创 shell命令之rm

操作系统为 macOS 10.12.4 rm 是删除命令 删除文件用 rm file 可以删除一个文件,然而删除一个文件后无法复原,所以可以用 rm -i file 在删除一个文件前提示是否删除。删除目录rm -r directory 可以删除一个目录删除链接从图中可以看到,如果删除了源文件...

2017-07-05 00:01:57

阅读数 1331

评论数 0

原创 shell命令之mv

shell 的 mv 命令为移动(moving)的意思,实际可分为文件间的移动,文件到目录的移动,目录到目录的移动。文件间的移动mv source_file target_file把文件 source_file 移动到 target_file,实际的意思就是重命名,其他不变,例如 inode 信息...

2017-07-02 17:57:06

阅读数 12929

评论数 0

原创 Linux cp命令

使用的操作系统为 macOS 10.12.4,linux 操作系统下可能会有所不同。 cp 为复制命令,实际中分为文件间的复制,目录间的复制,文件到目录的复制以及链接的复制。文件间的复制cp file1 file2 如果 file2 不存在,就先创建 file2 ,然后把 file1 内容复制到 ...

2017-07-02 16:36:42

阅读数 32407

评论数 1

原创 Android 矢量图动画(完结篇)

上一篇文章 讲解了如何对矢量图进行转换(scale, rotation, translation),以及讲解了如何对 Path Data 进行图形变换(Morph)。那么今天,我继续完成矢量图动画的最后两个内容,修剪(trim) 和 裁剪(clip),这将作为矢量图动画的完结篇,在这篇文章中,我并...

2017-06-23 18:08:25

阅读数 1151

评论数 0

原创 Android:获取并制作矢量图动画

通过上一篇文章,我们理解了 Path Data 的命令,这样就可以绘制一些简单的矢量图,也可以看懂一些简单的矢量图。但是,我们经常所看到的别人的矢量图,都并不简单,那么问题来了,这些复杂的矢量图我们怎么绘制呢? 当然是用一些 svg 编辑器 啦。 这个时候,你是不是感觉很兴奋呢,感觉可以开始画一些...

2017-06-19 18:56:46

阅读数 4881

评论数 4

原创 SVG 的 PathData 在 Android 中的使用

WhatSVG(Scalable Vector Graphics 可缩放矢量图形),是一种矢量图格式。在 Android 5.0 ( API 21) 时候,用 VectorDrawable 支持矢量图,用 AnimatedVectorDrawable 支持矢量图动画。Why在项目中如果要添加一张图...

2017-06-15 15:24:13

阅读数 1706

评论数 0

原创 QQ侧滑删除功能原理以及冲突解决

侧滑概要 前面几篇文章中已经学习了如何自定义 View / ViewGroup,学习了 View / ViewGroup 的事件分发机制,以及自定义 ViewGroup 的工具类 ViewDragHelper。那么今天,利用前面所学的,自己来做一个例子,仿QQ的侧滑删除功能。 先看看效果图 ...

2017-04-07 18:53:13

阅读数 358

评论数 0

原创 View & ViewGroup 绘制原理

概要 Activity 界面的根布局其实是一个名为 DecorView 的 FrameLayout, 在创建 DecorView 的时候,会相应的创建一个 ViewRootImpl 类来控制 UI 的绘制,其实也就是控制 DecorView。绘制的过程分为了 measure, layout, d...

2017-02-12 21:10:45

阅读数 293

评论数 0

原创 Android Glide 初步认识

Glide是什么一个图片加载库Glide 与 Picasso功能与Picasso一样。Google I/O 2015 的 app 就是使用这个库,同时在使用过 Picasso 后,对比看了下,感觉 Glide 比较灵活。为什么要使用Glide假如我们要从网络加载一张图片到ImageView,一般要...

2016-11-23 15:35:11

阅读数 1864

评论数 0

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