扫盲系列 - 面向对象六大原则

单一职责原则 – 优化代码的第一步 核心思想:接口或类只提供一种业务实现。 宗旨: 每个接口、类的功能,只能用来做专门的事,强调系统内业务职责唯一,避免职责扩散,做到业务统一管理。 解释:两个完全不一样的功能就不应该放在一个类中。一个类中应该是一组相关性很高的函数,数据的封装。应根据具体的业务,功能对类进行相应的拆分。 开闭原则 – 让程序更稳定,更灵活 核心思想:对扩展开放,对修改关闭。 宗旨:在已有系统基础上进行开发,不要对正常运行...

阅读更多

扫盲系列 - build.gradle 的基本介绍

project 和task 每一次构建,至少得有一个 project 完成,每一个 project 至少有一个 task ,每一个build.gradle 文件代表一个 project , task 定义在build.gradle中,当初始化构建的时候, gradle 会基于 build 文件,集合所有的 project 和 tasks ,一个 taks 包含一系列动作,然后他们将会按照顺序执行,一个动作就是一段代码块,很像 java 中的方法, 构建声明周期...

阅读更多

Activity 之 setContentView() 探究

Activity 怎么显示到 Window 上呢?那就要说到我们经常用到的 setContentView() 了。 setContentView() public void setContentView(View view) { getWindow().setContentView(view); initWindowDecorActionBar(); } Activity 具体实现交给了 Window 处理,而 Window 的实现是 PhoneWind...

阅读更多

扫盲系列 - AppBarLayout

CoordinatorLayout 和 ConstraintLayout 区别 CoordinatorLayout Material Design 的根布局,作为协调 Material 下所有控件的动画联动,所以被称为协调者布局 继承 ViewGroup ,是加强 FramLayout ,可以协调其他控件,并且实现控件之间的联动,通过在其直接子 View 中设置 behevior 来实现子 View 的不同交互效果, 一般作为一个界面的根部局,用来协调 Ap...

阅读更多

Window 创建过程

Window 的一些结论 View 是 Android 的视图呈现方式, View 不能单独存在,必须依附于 Window 这个抽象概念上面 有视图的地方就有 Window Android 提供视图的地方有 Activity , Dialog , Toast ,以及依托 Window 实现的视图,比如 PopUpWindow ,菜单 Activity, Dialog , Toast 等视图都对应一个 Window Activity 的 W...

阅读更多

数据结构和算法之美 - 排序

除了学习算法的原理,代码实现之外,还得知道如何评价,分析一个算法 如何分析一个排序算法 最好情况,最坏情况,平均情况的时间复杂度 知道这三种情况的原始数据是什么 时间复杂度的系数,阶数,常数 对于同一阶数的时间复杂度,需要把系数,常数,低阶等考虑进去 比较次数或者交换(或移动)次数 基于比较的排序算法,会涉及到两个操作,一种是元素的大小,一种是数据的交换或者移动 排序的内存消耗。 可以通过空间复杂...

阅读更多

数据结构和算法之美 - 栈,队列和递归

栈 后进先出者,先进后出者,就是栈,操作受限的线性表结构 当某种数据只涉及一段插入和删除的时候,并且满足先进后出,后进先出的特性,我们就应该使用栈。 链式栈 用链表实现的栈 顺序栈 用数组实现的栈 栈在函数中的调用关系 函数调用栈 操作系统给每个线程分配一块内存空间,这个内存空间被组织成栈结构,用来存储函数调用的临时变量,每调用一个函数,都会讲临时变量坐位栈帧入栈,等函数执行完成,返回后,将这个函数对应的临时变量出栈 栈在表达式求值中的应用 编译器通过两个栈...

阅读更多

数据结构和算法之美 - 数组和链表

数组 是一种线性表结构,用一组连续的内存空间,来存储一组具有相同类型的数据 线性表:数据排列的像是一条线一样的结构,每个线性表中的数据最多有前后两个方向 包括 数组,链表,队列,栈 非线性表: 数据之间并不是简单的前后关系,例如 二叉树,堆,图 Â 数组支持随机访问,根据下标随机访问的时间复杂度是O(1) 插入和删除 数组的插入和删除最好时间复杂度是O(1),最坏的时间复杂度是O(n),平均情况的时间复杂度是(1+2+3…+n)/n =O(n) 看起来都很低效...

阅读更多