Adb 运行原理和常用命令

概述

adb(Android Debug Briage) 一个通用的命令行工具,允许使用它与模拟器或 Android 设备进行通信。 adb 为一个 客户端-服务器程序,包含三个组件:

  1. 客户端。发送命令,在电脑端运行,发出 adb 命令从命令行终端调用客户端。
  2. 后台程序。在相应的设备(模拟器、真机)上运行命令,作为后台进程设备上运行。
  3. 服务器。管理客户端和后台程序之间的通信,在 开发计算机 上作为 后台进程 运行。 每个设备将获取一对按顺序排列的端口,一个用于控制台的偶数号端口和一个用于 adb 连接的奇数号端口。

android_sdk/platform-tools/ 中找到 adb 工具。

adb 工作方式

  1. 启动 客户端,如果没有 adb 服务器进程,则启动服务器进程。服务器启动后,与本地的 TCP 端口 5037 绑定,它监听从 adb 客户端发送的命令(所有的 adb 命令均使用 5037 端口与 adb 服务器通信)。
  2. 服务器与所有运行的模拟器或设备连接。它扫描5555 到 5585 之间的奇数号端口查找设备。 服务器一旦发现 adb 后台程序,它将与该端口的设备连接。
  3. 当服务器与所有的设备连接后,使用 adb 命令来访问这些设备。

Read More

Java IO 流

File

File 为文件和目录路径名的抽象表示方式。
一个 File 对象可以代表一个文件或目录的抽象。
建立 File 对象不会对文件系统产生影响。

File 为 文件与程序之间的联系,是一个抽象的概念,File 对象不能不能代表一个真正的文件。

File 不能按其字面意思理解为文件,File 为文件与程序之间的抽象关系,能够建立 File 对象不能说明文件真正的存在,故在使用 File 对象的使用需要对 File 对象关联的文件判断是否存在操作。

File 的基本操作

1
2
3
4
5
getName():获得文件的名字、路径名
getPath():路径名
getAbsoluteFile():绝对路径名
getParentFile():父路径,没有为 null
file 的绝对路径和相对路径

Read More

设计六大准则(设计模式之禅)

单一职责原则 (Single Responsibility Principle)(SRP)

定义: 应该有且仅有一个原因引起类的变更。

操作:

  1. 当一个类的几个职责之间没有相互依赖时,可以考虑将职责进行拆分。
  2. SRP原则适用于接口、类,同时也适用于方法,一个方法尽可能的做一件事。

好处:

  1. 降低类的复杂度,实现什么职责都有明显的定义
  2. 可读性提高、可维护性强
  3. 变更风险低

对于单一职责原则,接口一定要做到单一职责,类的设计尽量做到只要一个原因引起变化。

Read More

Java Basic Three

抽象类

存在只定义了方法的签名,没有方法的类称为抽象类。

  • 抽象类和抽象方法使用 abstract 修饰
  • 抽象类不能实例化
  • 抽象类可以没有抽象方法,可以有非抽象方法
  • 抽象类可以有成员变量、方法(抽象方法和非抽象方法)、构造器、初始化块、内部类(接口、枚举)
  • 含有抽象方法的类(定义了一个抽象方法的类、继承一个抽象方法但是没有完全实现父类中抽象的方法的类、实现一个接口但是没有完全实现接口中的方法)只能为抽象类

abstract 不能修饰成员变量和类方法,因为成员变量属于类实例,而抽象类不能实例化,抽象方法没有方法体,调用出错。

Read More

requestDisallowInterceptTouchEvent

###

调用 requestDisallowInterceptTouchEvent 方法会置位 FLAG_DISALLOW_INTERCEPTER 标志位,ViewGroup 将无法拦截除了 ACTION_DOWN 以外的事件,至于 ViewGroup 为什么还是会拦截 ACTION_DOWN 事件,是因为 ViewGruop 在 ACTION_DOWN 事件时会重新置位 FLAG_DISALLOW_INTERCEPTER 标志。

拖动百度地图出现黑影的解决方法

问题描述及解决方案

NestScrollView 嵌套 MapView 在滑动整个布局时,MapView 的上下边界出现黑影。

问题解决:

使用 TextureMapView 替换布局中的 MapView 并开启硬件加速,如果只在当前 Activity 中开启硬件加速,执行在清单文件中该 Activity 注册信息中添加标签:android:hardwareAccelerated="true"

硬件加速

Java 单例的几种写法

如何实现单例类

如果一个类只能创建一个实例,那么这个类称为 单例类

根据良好性封装原则,我们需要:

  1. 把类构造器函数隐藏
  2. 提供 public 方法获取类的实例对象,并用 static 方法修饰,因为调用该方法前该对象还不存在,所以该方法应该属于类。

饿汉式()

方式一:

1
2
3
4
5
6
7
8
9
public class Singleton{
private final static Singleton INSTANCE = new Singleton();

private Singleton(){}

public static Singleton getInstance{
return INSTANCE;
}
}

Read More

Android 焦点机制

No-touch Mode(非触摸模式) 和 Touch Mode(触摸模式)

Google 把触摸模式分为 No-touch Mode 和 Touch Mode。Android Phone 由于触摸屏,所以讨论的为 触摸模式,而像 Andorid TV、键盘、轨迹球一般为 非触摸模式

Focus(焦点)、Focusable(可聚焦)

在像 Android TV 、轨迹球这类设备上,我们可能需要通过遥控器等设备选择相应的选项,在交互过程中,我们选中的控件获得焦点,并通过颜色改变、高亮、突出等形式表现出来。
根据 Google 官方文档,在触摸模式下,其实没有没有焦点的概念,或者说此模式下的获得焦点的表现形式不同。在触摸模式下,Focus 以一种特别的方式 – Focusable 存在。

Read More

Java Baseic Two

== 与 equal 方法

Java 中判断两个变量是否相等有两个方法: == 和 equal 方法。

当使用 == 是,如果两个变量为基本数据类型,且都是数值类型,那么只要求两个变量的值相等,则为 true;如果两个变量为引用类型,那么只有当它们指向同一个对象时,返回值才为 true。但是 == 不可用于比较类型上没有父子关系的两个对象

equal 为 Object 的方法,所有的引用变量都可以调用该方法。但是使用 equal 方法判断两个对象是否相等的标准和 == 是一致的,都是在两个变量指向同一个对象时,才会返回 true。直接使用 Object 的 equal 方法没有什么意义,一般需要我们自己定义 equal 方法自定义相等的标准。

在平常的开发中我们会有这样的一个误区: == 是判断两个变量是否相等, equal 是用来判断两个变量的值是否相等,其实后半句话有一个前提,就是变量的类型为 String ,这是因为 String 已经为我们重写了 equal 方法,用于判断两个字符串的值是否相等,具体可以参见 String 的源码。

所以在两个变量皆为引用数据类型是, == 与 equal 方法没有什么区别,都是判断两个变量是否指向同一个变量。

Read More

Java Basic One

对象的三大特征

对象的三种基本特征:继承、封装、多态。

Java 语言为纯粹的面向对象的程序编程语言,主要表现为 Java 完全支持对象的三大基本特征。

封装: 将对象的实现细节隐藏起来,然后通过一些公用方法暴露该对象的功能。

继承:子类继承父类,子类作为一种特殊的父类,将直接获得父类的属性和方法。

多态:子类对象可以直接赋给父类变量,但在运行时依然表现出子类的行为特征,这意味着同一个类型的引用对象在执行同一个方法时,可能表现出多种行为特征。

Read More