8 大胃粥

尚未进行身份认证

要么不做,要做就做好。

等级
TA的排名 5w+

bash数组

bash提供了索引数组和关联数组,并且只支持一维。什么是索引数组?就是用数字作为索引值,操作数组的元素的数组。这就相当于Java的Map<Integer, String>。什么是关联数组?就是用字符串作为索引值,操作数组元素的数组。这就相当于Java的Map<String, String>。创建数组创建索引数组索引数组的创建可以直接通过声明的方式# 声明一个数组...

2020-01-21 17:21:46

shell case结构的多分支执行

通常,我们使用 case 结构是不同的分支执行不同的命令,例如#!/bin/bashvar=acase "$var" in a) echo "case a" ;; b) echo "case b" ;; c) echo "case c" ;; *) echo "case *" ;;esac这个脚本每次只能执行一个分支。如果有两个分支执行相同...

2020-01-20 17:58:30

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

基本使用最直观的 for 语法如下for name in [in words ...]; do commandsdone我们可以利用 for 语法做一个遍历,例如#!/bin/bashfor i in {1..10}; do echo $idone这样看起来不是很直观,因此 shell 还提供一些类似高级语言的写法for (( exp1; exp2; exp3 )); ...

2020-01-20 16:21:53

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

在使用 shell 的 test 命令处理算术条件表达式时,总让我觉得这个命令是个垃圾。例如#!/bin/bashvar=5if [ "$var" -gt 0 -a "$var" -lt 10 ]; then echo "var is $var"else echo "var is not in range"fi我在关于shell的test命令格式的各种疑惑这篇文章中,解释了为何...

2020-01-20 15:38:16

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

test 命令的空格shell 的 test 命令用来测试一个表达式,例如#!/bin/bashif test -n $1; then echo "\$1 = $1"fi但是这种形式很丑陋,我们习惯在 if 语句后使用括号来执行判断语句,因此 test 命令有一个简写形式,那就是 [。对,你没有看错,test 命令的简写形式只有一个开括号 [,并不包括另外一个闭括号 ]。如果 t...

2020-01-20 14:32:53

getopts命令解析shell脚本选项

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

2020-01-20 12:51:12

Shell 重定向

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

2020-01-15 17:47:25

SystemUI之StatusBar通知图标控制分析

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

2020-01-10 13:58:21

SystemUI之StatusBar的创建与图标控制

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

2020-01-08 16:13:24

Linux 文件权限

我们通常所说的文件权限,其实说的是用户对文件的权限。它由文件模式位( file mode bits )控制,并且由两部分组成文件权限位( file permission bits),它控制这普通的访问权限,例如读,写,执行权限。特殊模式位( special mode bits ),它由设置用户ID,设置组ID,限制删除标志(也叫做粘着位)组成。它有一些比较特殊的用途,例如方便创建共享目录。...

2020-01-03 17:00:51

Linux sort 命令

默认排序方式现有如下文本$ cat hard-sort.txt 312346Adb85AbcaAbaab现在我想用 sort 命令对这些行进行排序$ sort hard-sort.txt 31234685AbcAdbaAbaab这个排序结果似乎是杂乱无章的,但实际是有规律可循的。sort 命令把文件的每一行当做一个字符串,然后以比较字符串的方式来对...

2019-12-29 16:51:03

Shell echo 命令

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

2019-12-27 15:04:36

了解 Linux 命令的信息

命令分类命令有四种类型可执行程序。例如find命令,它路径为/usr/bin/find。shell内置命令。例如cd命令。shell函数。别名。例如在Ubuntu中,ls是ls --color=auto的别名。识别命令命令有四种分类,有时候需要知道命令的类型而做出不同的动作,例如要查询命令的信息,首先需要知道命令的类型,然后再调用不同工具命令来查询该命令的信息。type - 显...

2019-12-26 13:31:08

Android MTP 实现框架分析

MTP简介MTP(Media Transfer Protocol)是PTP(Picture Transfer Protocol)的扩展,当PC端(Windows, Mac, Linux)与手机通过USB的MTP模式进连接的时候,在PC端是可以看到手机存储中的文件的,然而这个文件都只是手机存储中文件的映射,是一个虚拟的,因此手机存储的保护性就比较高了。MTP定义了需要命令,PC端可以利用这些命令操...

2019-05-09 18:46:36

Andrid MTP之UsbService分析

UsbService

2019-05-09 18:46:21

源码剖析: Notification的发送

NotificationManagerService启动在system_server进程中,启动了NotificationManagerServiceframeworks/base/services/java/com/android/server/SystemServer.javaprivate void startOtherServices() { mSystemServiceMa...

2019-05-09 18:06:38

Android音频焦点处理

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

2018-12-07 17:20:14

实现RecyclerView索引

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

2018-07-09 23:44:55

Okhttp 之 HTTP Cookie 实现

本文主要的目的是分析 Okhttp 如何实现 HTTP Cookie,而 Cookie 是在 BridgeInterceptor 中使用的,因此本文从 BridgeInterceptor 讲起。BridgeInterceptorBridgeInterceptor 是用来为请求报文设置首部信息,例如 Connection: Keep-Alive,这些首部其中就包括 Cookie 首部。...

2018-04-17 14:53:05

Okhttp 之HTTP 缓存实现

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

2018-04-12 17:03:18

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。