RUOYE文章与笔记 返回主页

RUOYE / ARCHIVE

All notes.

按时间整理的完整文章记录。

13 / NOTE

关于自动化的一些思考

引 最近玩了一个游戏,叫做另一个伊甸:超越时空的猫,一个 RPG 游戏,之所以想说一下这个游戏,并不是说它的剧情多好、画面多精美之类的,想说的是这个游戏机制中非常恶心的一点: 很多任务的完成条件,都需要依赖于大量的“刷怪”,比如任务完成需要获取 “XX晶体” 30 万个,而 “XX晶体” 的来源只能…

阅读
14 / NOTE

iOS 嵌套滑动方案

由于工作上的需求,需要在 iOS 中做一个类似于嵌套滑动的案例,大致上就是,顶部有一个 Header,下面是一个 List,然后 Header 会随着 List 的滑动进行展开或收起。这种功能在 Android 中倒是挺常见,直接使用 Material 相关的一些组件就能完成,之前也多次使用过,但是…

阅读
15 / NOTE

OC block 变量捕获

在做 iOS 开发的时候经常会需要使用到 block,简单来说 block 就是一个匿名函数,但是相比于常规意义上的函数,它除了能执行相应的代码逻辑、传递参数之外,还有一个比较重要的特性,就是 block 会捕获变量,根据变量类型(作用域、生命周期)的不同,block 会对其有不同的捕获方式,先列总…

阅读
16 / NOTE

Objective-C 引用计数

所有代码基于 objc 818.2 说到 OC 这个语言,一般都会说,OC 是 C 的超集实现,在 C 的基础上增加了 runtime 机制,使得 OC 成为一个动态语言,同时也增加了一些语言特性,比如增加了类的概念,同时也增加了一些内存管理方面的功能。 而对于内存管理,一般就是指 OC 的对象引用…

阅读
17 / NOTE

Flutter 异步机制:microtask

本文与 Flutter 异步机制:Future 比较相关,如有需要,可以先看下关于 future 的介绍(主要是发送任务、接受任务部分)。 之前说到 Flutter 中与异步相关的 Future,了解到,dart 是一个单线程模型的语言,当我们使用 Future 去实现一个异步操作时,多半是利用单线…

阅读
18 / NOTE

bash 下一次执行 cd 报错问题排查

背景就是,最近有遇到,在 bash 下,加载了 rvm 后,设置了 set e(这个命令就是,shell 遇到命令执行错误的时候会自动退出) ,然后执行 cd 到一个目录下,竟发生了神奇的一幕,shell 退出了。不甘心的我,继续设置了 set x(shell 调试用,会打印每一个执行的命令),再执…

阅读
19 / NOTE

算法分析:Valid Triangle Number

最近参与了一些面试工作,于是想着从 LeetCode 上找一些备选的算法题目,用于测试面试者的算法能力,本着希望一个算法既能够让面试者可以通过通俗的方式解决,不至于太过打击其信心,又不至于太过简单或太过常见,无法判断出面试者对于算法问题的思考这种心态,发现了一个不错的题目,即使标题上已经说了的,Va…

阅读
20 / NOTE

Flutter 滑动体系

ScrollView 可滑动视图的父类,ListView,CustomScrollView 和 GridView 都是它的子类,它们通过实现 buildSlivers 函数为 ScrollView 提供子视图,同时将 ScrollController,ScrollPhysics,ViewportBu…

阅读
21 / NOTE

关于 delegate 和 listener 的思考

近一段时间有做 iOS 的开发,经常会使用到 delegate,在使用的时候经常是对标 Android 中 listener 的功能,大致流程就是给宿主类设置一个 delegate,然后当宿主会要回传一些信息的时候,就调用 delegate 的方法。 举个例子: 这是一个自定义的进度条 View,它…

阅读
22 / NOTE

iOS GCD dispatch group 介绍

上次说到 GCD 中我们可以通过 GCD 提供的函数创建 block 这种方式,实现对 block 的管理,比如取消 block,比如监听 block 的执行情况,而 block 的 wait/notify 的实现就依赖于 dispatch group 这一功能,所以现在来看下 dispatch g…

阅读
23 / NOTE

iOS GCD dispatch block 介绍

上次说到 dispatch queue,一般情况下 dispatch queue 操作的对象就是 dispatch block,它的声明如下: 也就是一个没有返回值、没有参数的函数,一般情况下我们可以直接通过如下方式创建一个 block: 创建 block 不过在 libdispatch 中还提供了…

阅读
24 / NOTE

iOS GCD dispatch_queue 介绍

GCD 是 iOS 中对多线程能力的一种封装,全名称为 Grand Central Dispatch,一般情况下,我们只需要了解 GCD 的基本使用,便可以在 iOS 中进行简单高效的多线程开发。 iOS 中的多线程 与 GCD 的功能类似的,还有两个,分别是 NSThread 和 NSOperat…

阅读
25 / NOTE

Python 字符串编解码

在 python 中使用字符串的时候,尤其是使用中文字符串的时候,常常需要使用到字符串的编解码,而且由于 python2 和 python3 二者对于字符串的实现上略有区别,导致从 python2 切换到 python3,或者需要满足同时支持 python2 和 python3 的时候,对于中文字符…

阅读
26 / NOTE

flutter 路由机制

参考代码版本,1.18 整个 flutter 应用的运行都只是基于原生应用中的一个 view,比如 android 中的 FlutterView,flutter 中的页面切换依赖于它的路由机制,也就是以 Navigator 为中心的一套路由功能,使得它能够完成与原生类似且能够自定义的页面切换效果。 …

阅读
27 / NOTE

Android jni 使用说明(cmake)

Android jni 使用说明(cmake) 项目中使用 jni 1. 添加 jni 文件 首先在 main 文件夹下新增一个 cpp 文件夹,然后在文件夹中创建一个 CMakeList.txt 文件,用于 ndk 相关的配置,基本如下 首先使用 add library 添加一个库,指定了库的名字…

阅读
28 / NOTE

flutter widget 体系

flutter widget 体系 flutter 中的 WidgetsFlutterBinding 集成了 GestureBinding、ServicesBinding、SchedulerBinding、PaintingBinding、SemanticsBinding、RendererBindin…

阅读
29 / NOTE

flutter 视图渲染流程

Flutter 视图渲染流程 flutter 中的 WidgetsFlutterBinding 集成了 GestureBinding、ServicesBinding、SchedulerBinding、PaintingBinding、SemanticsBinding、RendererBinding、W…

阅读
30 / NOTE

flutter PaintingBinding

flutter PaintingBinding flutter 中的 WidgetsFlutterBinding 集成了 GestureBinding、ServicesBinding、SchedulerBinding、PaintingBinding、SemanticsBinding、Renderer…

阅读
31 / NOTE

flutter scheduler 机制

flutter scheduler 机制 flutter 中的 WidgetsFlutterBinding 集成了 GestureBinding、ServicesBinding、SchedulerBinding、PaintingBinding、SemanticsBinding、RendererBin…

阅读
32 / NOTE

flutter 消息传递机制

flutter 消息传递机制 flutter 中的 WidgetsFlutterBinding 集成了 GestureBinding、ServicesBinding、SchedulerBinding、PaintingBinding、SemanticsBinding、RendererBinding、W…

阅读
33 / NOTE

flutter 事件分发流程

flutter 事件分发流程 flutter 中的 WidgetsFlutterBinding 集成了 GestureBinding、ServicesBinding、SchedulerBinding、PaintingBinding、SemanticsBinding、RendererBinding、W…

阅读
34 / NOTE

Flutter 应用启动流程

Flutter 应用启动流程 在 Flutter 项目中,应用的启动一般是从 main.dart 开始的, App 就是应用的主页面,本质上是一个 Widget,换句话说,在 Flutter 中,万物皆为 Widget,它由开发者编写,runApp 则负责将这个 Widget 运行起来,展示到手机界…

阅读
35 / NOTE

Flutter 引擎启动流程

Flutter 引擎启动流程 基本流程 起于 Android 中,分别在 FlutterApplication 和 FlutterActivity 中执行了一部分的操作,并通过 JNI 进入 C++ 层,创建一系列 Flutter 的基础结构,Engine、Animator、Shell 等,通过 C…

阅读
36 / NOTE

Flutter 异步机制:Isolate

Flutter 异步机制:Isolate 在 Future 一篇中有说到,Future 本质上是单线程异步,一般只适合非耗时任务的执行,否则就会堵塞后续的 UI 操作,而耗时任务,还是需要使用多线程才行,在 flutter 中没有 Thread ,但是可以通过 Isolate 开启新的线程,并且对多…

阅读
37 / NOTE

Flutter 异步机制:Future

Flutter 异步机制:Future Flutter 基于 dart 语言,dart 本身是一个单线程模型,Future 也是基于单线程的异步机制,即基于事件循环实现的异步,与多线程实现的异步并不一样,比较类似于 Android 中的 Handler 机制,而所谓的异步,就是向事件循环中心发送一条…

阅读
38 / NOTE

Android Activity 介绍

activity 是 Android 系统四大应用组件之一,其它三个为 Service (服务) 、 BroadcastReceiver (广播)、 ContentProvider (内容提供器)。 1. android中一个app的入口是 activity ,一个app至少要有一个 activit…

阅读
39 / NOTE

Android Volley 源码阅读笔记

Volley 是谷歌推出的一款轻便的网络请求库,全部不足 50 个文件,与 OkHttp 相比实在算不上臃肿。使用上也比较方便,你可以自由地定义自己的 Request 类,直接将返回数据转换成自己需要的格式,如果你需要使用 ImageView 展示网络图片的话那就更巧了,Volley 提供了一个 N…

阅读
40 / NOTE

Java 引用

从内存泄漏谈起 说到 Android 的内存泄漏,就不得不提到 Java 的引用和内存回收机制,不论是面试,还是日常开发,内存泄漏都是 Android 开发者的一个重点,这起源于一个优秀的开发者对自己的规范,一个优秀的产品对用户的负责,我们开发软件时始终都会围绕着两个问题,功能和体验,丰富易用的功能…

阅读
41 / NOTE

ViewModel 简介

ViewModel ,开发中的又一大利器,其名字也正好对应着 MVVM 中 ViewModel ,这并不是巧合。从功能上看,它负责为 Activity 和 Fragment 提供和管理数据,也就是为 View 层提供数据服务,它能够在屏幕方向切换的时候保存数据,也能够在多个 Fragment 组件中…

阅读
42 / NOTE

LiveData 简介

LiveData 是一个用于存储数据的类,但它并不是仅仅用于数据的存储,还用于传递,每一个 LiveData 都是一个观察者模式的实现。其存储功能即在其内部有一个 mData 变量,并提供了 getValue() 和 setValue() 等方法对这个数据进行操作,其传递功能,就在于这个类也是观察者…

阅读
43 / NOTE

Android Lifecycle 简介

基本功能 Lifecycler 是一个生命周期管理工具,说的具体点,是用于管理 Activity 和 Fragment 生命周期的工具,它可以探测到 Activity 和 Fragment 这些宿主生命周期的变化,并将这些变化通知给需要的类。其使用场景,就是在某些时候,一个类需要在 onCreate…

阅读
44 / NOTE

Android EventBus 3.x 分析

EventBus 是 Android 中一个用于在组件之间传递时间的解决方案,基于观察者模式的思想,与 Android 中的本地广播有类似的实现原理,不过相比之下更加自由,在这种方案下,通信的组件之间没有耦合。在一般的组件通信中,大致有两种方式,第一种是利用回调方法,在这种方法中,事件处理者始终需要…

阅读
45 / NOTE

Java 线程锁

线程锁 线程锁是什么?首先要明确一系列的概念,在操作系统中,线程之间共享同一个进程的内存,所以再多线程环境中,经常会遇到多个线程同时操作同一个变量的情况,如果是读操作还好说,但是对于写操作,很可能会出现问题。这又涉及到操作的原子性问题,只有原子性的操作在多线程中才是安全的,如 x = 5 (直接赋值…

阅读
46 / NOTE

Java ThreadLocal 原理

在操作系统中,每个进程都有自己的内存空间,而所有的线程共享同一片内存,但是有些时候开发者可能希望保存一些线程内部的数据,不与其他线程共享。如 Android 中的消息机制中的 Looper ,其对象就是一个线程私有的,每一个 Looper 对象对应着一个线程。这种需求在内存的角度是不能实现的,只能从…

阅读
47 / NOTE

Android 子线程更新 UI

在 Android 开发中有一个常识,那就是子线程中不能更新 UI ,所以,在使用子线程执行一个任务之后,总是还需要一个 Handler 切换到主线程,然后才能将结果展示在 View 中,否则就会抛出 CalledFromWrongThreadException 异常。 那么是否一定不能在子线程中更…

阅读
48 / NOTE

Android Activity 启动模式

Activity 有四种启动模式,分别用于不同的使用场景: 1. standard 2. singleTop 3. singleTask 4. singleInstance 下面将介绍每种启动模式的特点、使用场景以及使用方式。 Standard 这是 Android 中默认的 Activity 启动…

阅读
49 / NOTE

Android 广播介绍

广播是 Android 的四大组件之一,是观察者模式的一种实现,利用广播能够轻松的进行应用内不同组件的通信、应用之间的通信等,一个广播分为两个部分,广播发送者和广播接收者,一般来说充当发送者的是 Context ,在 Context 中有 sendBroadcast() 、 sendOrderedB…

阅读
50 / NOTE

Java 线程控制

Java 是一门支持多线程的语言,也提供了一些关于线程控制的方法,使开发者在做一些多线程编程的时候能够实现更加丰富的功能,下面列出常见的几种方法以及它对线程的控制情况: 1. wait() :运行 阻塞 2. notify() :阻塞 就绪 3. sleep() :运行 阻塞 4. join() :…

阅读
51 / NOTE

Java Map

在 Java 中,Map 是与 List 一样的最常用的数据结构之一,相比于 List ,Map 是一种键 值存取的数据结构,也是一种高效的查找数据方案,相较于 List 的遍历查找,Map 可以使用诸如哈希表、二叉搜索树的方式查找。Map 是一个接口,其实现主要有四个类: 1. HashMap 2…

阅读
52 / NOTE

Android Choreographer 简述

在 Android 属性动画 中讲到,ValueAnimator 的工作需要使用到 Choreographer 类,这个类负责的不只是与动画相关的功能,准确来说,它负责协调动画、输入和绘制这三种事件的工作。在这个类内部保存了回调队列数组 mCallbackQueues ,每一个队列存放着一个类型的回…

阅读
53 / NOTE

Android View 绘制流程

前面讲到 Android View 加载流程,使用 LayoutInflater 将 xml 文件转变成 View ,但是还需要将 View 绘制出来,才能被用户看到,这一过程为绘制流程。由于 Android 的整个 View 是以树的形式出现的,所以很多关于 View 的机制,如加载、事件分发等,…

阅读
54 / NOTE

Android View 加载流程

一般情况下, Activity 会绑定一个 xml 文件,作为 Activity 展示的页面,对应的方法为 setContentView(int) 或者是 setContentView(View) ,以前者为例,这个方法是如何将一个 xml 文件展示出来的?下面就追本溯源,寻其根本。 Activit…

阅读
55 / NOTE

Android OkHttp 原理分析

OkHttp 是 Android 上的一个第三方网络请求库,提供了一系列关于网络请求的方法,现今一般的 APP 都会涉及到网络请求,而且一般是比较频繁的网络请求,所以会用一个网络请求库,以及了解其内部实现原理,是有必要的。 对于 OkHttp 网络请求库来说,发起一个网络请求需要用到类有这么几个: …

阅读
56 / NOTE

Android Service 简述

Service 是 Android 中的四大组件之一,相比于多运行在前台用户可见的 Activity ,Service 的存在用户往往察觉不到,如果说 Activity 主要是负责与用户进行交互的话,那 Service 则更多的用来处理任务,如一些后台文件的下载,或者是大量数据的处理等,用户提交给 …

阅读
57 / NOTE

Android SharedPreferences

SharedPreferences 是 Android 中一种轻量级的持久化存储方案,其本质是使用 XML 文件存储一系列的键值对,为了提高其使用效率,采用了异步写、内存缓存等方法。 关于调用 SharedPreferences 是一个接口,其实现类是 SharedPreferencesImpl ,…

阅读
58 / NOTE

Java Object -- 所有类的父类

Object 是 Java 中所有类的父类,即使没有显示声明,编译器也会默认加上,Object 这个父类存在的意义,大概就是给所有的类都添加几个默认的方法。为什么 Java 的开发者认为所有的类都需要这几个方法?这足以说明这几个方法的重要性,所以我认为,所有的 Java 开发者,都应该对这几个方法的…

阅读
59 / NOTE

Java 内部类

Java 内部类 Java 是一门面向对象的语言,所有功能的实现都是基于类的,类于类之间可以发生关系,如继承、实现接口,其中有一种关系叫做内部类,顾名思义,在某一个类内部定义的类叫做内部类。而内部类又可以根据定义的方式、位置、特点等,划分为四种:成员内部类、方法内部类、静态内部类和匿名内部类。 这四…

阅读
60 / NOTE

Java 静态方法与单例

一般来说,静态方法和单例模式的使用,大多使用在工具类/方法中,在需要的时候调用对应的静态方法/单例方法完成某项功能。也就是说,在功能上,它们之间是有一定的重合的,那么在实际开发的过程中,如何选择使用哪一种方式实现某个功能?要了解如何使用,首先应该了解的是它们之间的区别。 关于调用 二者都是可以直接通…

阅读
61 / NOTE

Android 进程优先级

Android 手机的内存是有限的,一般情况下用户打开了某个软件然后返回到主菜单的时候,应用所占的内存一般不会直接释放,而是先保留一段时间。随着用户打开的应用越来越多,内存总有见底的时候,这时就需要移除某些在系统看来不需要的进程,释放出足够的空间供用户打开新的应用。 先移除哪些进程是需要根据进程的优…

阅读
62 / NOTE

Java List

在 Java 中虽然有数组这个东西,但是保存一组数据的时候最常用的还是 List ,因为在使用数据的时候数据的长度往往是不固定的,所以要在使用之前先声明长度、并且在声明之后长度便不可变的数组,显然不是一个好的数据结构。 List 有许多实现类,常用的大致两种,ArrayList 和 LinkedLi…

阅读
63 / NOTE

Android P 网络请求失败

很长一段时间没有碰过 Android 开发了,最近重拾之前开发过的软件,先更新了一下版本,将 targetSdkVersion 更改为了 28 ,重新编译安装之后发现怎么也加载不出来东西,并且有报错,java.net.UnknownServiceException: CLEARTEXT commun…

阅读
64 / NOTE

Android 数据持久化

对于计算机上的数据持久化而言,归根结底就是将数据保存在磁盘上,使得即使在断电的情况下数据仍然能够留存,不同的是使用不同存储方式时数据存储结构的不同,在 Android 开发中常用的数据持久存储方式大致有以下五个: 1. SharedPreferences 2. SQlite 3. ContentPr…

阅读
65 / NOTE

设计模式 - 单例模式

介绍 单例模式,即一个类只有一个实例,所有要使用这个类的时候,使用的都是这同一个实例,基本做法就是,在类的内部存放一个静态的实例,然后类再提供一个静态方法以供其他类获取到这个实例。如: 单例模式最重要的问题,就是如何得到这个实例,以及在什么时候得到这个实例。由此就得到了数种不同的单例模式。 种类 饿…

阅读
66 / NOTE

Java 线程池介绍

线程 在开发应用程序的时候,是用到线程的地方很多,一般情况下应用程序都会有一个与用户交互的界面,而在用户操作程序的过程中,肯定会经常执行到一些耗时操作,如网络请求、文件处理等,如果这些操作与处理用户交互的工作处于一个线程中,肯定会导致线程堵塞,在用户看来,就是界面卡顿了,这种情况肯定会造成用户的不满…

阅读
67 / NOTE

Android Handler 机制实现

Handler 机制是 Android 独有的一套切换线程的方式,Java 中并没有类似的东西(毕竟 Android 是以消息驱动的,Java 不是),那么是否可以在 Java 中实现类似的一套机制,下面先对 Android 中 Hanlder 机制使用到的东西进行分析: Handler 机制分析 …

阅读
68 / NOTE

Android Handle 机制

ANDROID 消息机制 Android 系统的运行采用消息机制,在主线程中所有的操作的执行都需要依靠 Hadnler 发送消息的方法来完成,因为在 ActivityThread 中创建了主线程的 Looper 并且调用了 Looper:loop() 方法,这个方法会堵塞当前线程(因为其内部有一个死…

阅读
69 / NOTE

Android Context 介绍

Context Context 是一个抽象类,根据其翻译“上下文、环境”就可以了解到,Context 与应用的运行密不可分。下面是源码中对 Context 的介绍: Interface to global information about an application environment. T…

阅读
70 / NOTE

Https 介绍

HTTP HTTP: hyper text transfer protocol(超文本传输协议) HTTP 普遍使用于各网站,基于 TCP ,是一个无连接、无状态的协议,速度较快,但是传输数据的时候使用的都是明文传输,所以在安全级别比较高的场景不合适,所以就衍生出基于 HTTP 的较安全的协议 HT…

阅读
71 / NOTE

Android 属性动画

Android 动画 界面时用户与程序交互的媒介,一个好的界面会让用户更愿意使用这个程序,动画则能很大程度上提升用户的操作体验,使得界面的切换不那么突兀,给人一种水到渠成的感觉,所以在合适的时间、合适的地点使用动画非常必要,Android 提供了几种不同类型的实现动画的方式,视图动画、属性动画和帧动…

阅读
72 / NOTE

Java 内存模型

Java 内存区域 首先,在 JVM 中会将内存区域划分成五个部分(如上所示),其中蓝色区域(方法区、堆区)是线程间共享的,绿色区域(虚拟机栈、本地方法栈、程序计数器)是线程私有的,每个线程独立的保留一份数据。各个区域存储的数据及功能如下: 方法区 方法区是线程共享的一片区域,它主要存放的是虚拟机加…

阅读
73 / NOTE

算法-排序

排序是最最基本的算法之一,一般的排序算法有以下几种: 1. 插入排序 2. 选择排序 3. 冒泡排序 4. 快速排序 5. 堆排序 6. 希尔排序 7. 归并排序 8. 计数排序 9. 桶排序 10. 基数排序 插入排序 从数组第一个开始,根据当前需要排序的位置的值,找到在它之前的一个有序数组里面,…

阅读
74 / NOTE

Android URI 权限

背景 自从 Android 7.0(M) 版本之后,Android 的资源文件访问方式出现了变化。在开发的过程中,有些时候我们需要使用 Uri 和 File 互相转化,比如调用系统的相册选取图片的时候, 就是通过传递文件的 Uri 传递选取的图片的,我们在得到这个 Uri 之后一般并不能直接使用,还…

阅读
75 / NOTE

Android IPC 方案

IPC(Inter Process Communication): 进程间通信 是所有系统中不可忽略的一部分,在 Android 中,我们知道系统会为每个 APP 分配一个 DVM 实例,而每个 DVM 实例都处于一个单独的进程中,也就是说,一般情况下每个 APP 都处于一个单独的进程,而 APP …

阅读
76 / NOTE

Android apk 编译流程

Apk 编译 Android 软件开发,一般情况下是指将一个空白的项目,一点一点变得丰满,使得这份代码生成的 Android 应用能够完成越来越多的功能的过程,所以大部分人的工作就是,写代码,然后点击运行,就可以看到代码变现成了一个一个的功能,所以大部分的软件开发也就到写代码为止了。不过从一段代码变…

阅读
77 / NOTE

Java 移位操作

移位运算符 Java 有三种移位运算,即 (算术右移) 、 (逻辑右移) 、 算术右移,将当前操作数的二进制形式顺位右移某几位,并保持最高位与移动前一致,其余位补 0。 逻辑右移,将当前操作数的二进制形式顺位右移某几位,其余位补 0。 2 ⇔ 0000 0000 0000 0000 0000 000…

阅读
78 / NOTE

Android CoordinatorLayout 介绍

Android 官方提供的 Material Design 库让我们的 App 很轻松的就能实现一个比较炫酷的效果,如 CoordinatorLayout ,能够通过 Behavior 来协调它的各个子 View ,使得在 CoordiantorLayout 中的一个子 View 的状态发生变化的时…

阅读
79 / NOTE

Android ViewPager 设置不可滑动

在实际开发中有时会使用到使 ViewPager 不可滑动的要求,比如在 ViewPager 与它包含的某一页出现了滑动冲突,同时这个滑动冲突还不能依靠修改当前页中的某个控件来进行修复的,可以通过关闭 ViewPager 的手势滑动功能来消除滑动冲突。具体的代码如下:

阅读
80 / NOTE

Shell 简单说明

Shell 介绍 Shell 是一个 C 语言编写的程序,以方便用户对系统进行操作。它既是一种命令语言,又是一种程序设计语言。我们可以直接在系统的终端中输入一行一行的命令,每一个命令都会得到它的反馈,同时我们也可以编写一个脚本文件,在里面写上比较复杂的命令与操作,并且可以使用结构化的程序设计方式,完…

阅读
81 / NOTE

Android 源码下载、编译、查看流程记录

概述 作为一名 android 开发工作者,想要在 android 开发的道路上走得更远,阅读源码肯定是一种必要。然而在日常写代码的时候我们使用的是 android SDK 提供的一系列的接口,使用 SDK 的过程中总会不可避免地遇到各种各样的问题,这时候阅读源码则能够帮助我们更好地解决遇到的问题,…

阅读
82 / NOTE

Android view 视图层次

Android 页面显示层次 由此图可以看到 Activity 作为显示一个页面最基本的元素,它本身并不负责显示页面,而是通过 PhoneWindow 这个窗口映射到显示屏上一系列的 View 来显示内容,PhoneWindow 里面又包含一个 ViewGroup ,即 DecorView ,Dec…

阅读
83 / NOTE

Android 事件分发

android事件分发 责任链模式 有一公司A,一客户给公司的boss发派了一个任务,然后boss比较忙,旨在锻炼下属,就把任务抛给了下属,即二级boss,然后这个二级boss也与大boss有同样的想法,就再把这个任务抛给了下一级,一层一层,直到传递到最后一层了,一个刚入职的萌新,试用期还没过,一看…

阅读
84 / NOTE

Android 拍照、打开相册

获取照片方法 1. 打开相册方法 这里 Intent.ACTION GET CONTENT 表明了要打开的activity的类型, setType() 标示了要选取的文件类型。 2. 打开相机方法 这里 Intent.EXTRA OUTPUT 指定了拍照之后将照片存储的Uri路径,这里需要提供一个U…

阅读
85 / NOTE

设计模式六大原则

设计模式 六大原则 单一职责原则 Single Responsibility Principle 定义 不要存在多于一个导致类变更的原因,即一个类只负责一项职责。 描述 在最初新建一个类的时候,一般都能够保持「单一职责原则」,但是一个类建立完成之后一般不是一成不变的,往往随着应用规模的提升,一个类的…

阅读