自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 Launcher结构之UI(二)--Workspace加载

上一节主要讲了一下LauncherUI的组成,讲解了每个模块具体是由那些控件组成的。上节末尾提到了workspace,它是整个launcher模块中最重要的部分,因此本篇主要来梳理workspace的加载默认布局的流程,主要梳理一些重要函数和它加载布局的几种方式。...

2022-01-11 16:52:19 663

原创 Launcher结构之UI(一)

前言Launcher作为Android系统开机后第一个呈现给用户的界面。Launcher在一定程度上决定了当前设备的UI美观、性能和体验,因为这是最直接最优先带给用户使用设备的感受,但是其本质上就是一个Activity,因此它也是由各个控件组合而成的,本系列主要将Launcher进行结构拆分,本篇主要以Launcher的UI为主,来讲解一下UI的布局。在UI上,Launcher应该提供给用户更多的自由,更多的自定义,因为每个用户都有装扮自己手机等设备桌面的习惯和需求,如定义应用的分类,定义应用的快捷启动

2022-01-07 15:03:19 2654

原创 SystemServer启动Launcher流程

了解过Launcher(桌面)的人都知道launcher作为桌面是用户开机解锁后看到的第一个页面,其本质上就是一个Activity。因此,它的启动自然少不了AMS(ActivityMangerService)的参与,对于Service的统一管理,必然少不了SystemServer的参与。本文主要梳理Android系统开机之后,从SystemServer开始启动Launcher的流程。由SystemServer启动Launcher的简易流程图可知,该过程其实就是系统进程到应用进程的一个过程,他们之间通过B

2022-01-04 19:36:05 2157

原创 MySQL学习(5)——Java的JDBC编程

1.数据库编程的必备条件编程语言,如Java,C、C++、Python等数据库,如Oracle,MySQL,SQL Server等数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包(数据库官方提供的给各编程语言进行数据库连接、sql操作的API),如:MySQL提供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的,要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc2.Java的数据库编

2020-12-29 10:46:21 284

原创 MySQL学习(4)——索引事务

1.索引1.1 概念索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。(具体细节在后续的数据库原理中讲解)1.2 作用快速检索式数据(定位)我们用一本书来举例,数据库中表就相当于放书的书架,数据就相当于书的内容,索引就相当于是书的目录,通过目录我们就可以快速定位到我们想看的那一页,这就是索引的作用1.3 使用场景要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:数据量较大,且经常对这些列进行条

2020-12-09 10:30:48 105

原创 MySQL学习(3)——表的增删查改(进阶)

1.数据库约束1.1 约束类型NOT NULL - 指示某列不能存储null值UNIQUE - 保证某列的每行必须有唯一的值DEFAULT - 规定没有给列赋值时的默认值PRIMARY KEY - not null 和 unique 的结合,确保某列(或多列)有唯一的标识,有利于更快找到某个特定记录FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性CHECK - 保证列中的值符合指定条件(mysql中没有,但是保留的其语法,即不会产生任何作用),了解就行1.2

2020-12-07 16:22:50 574

原创 MySQL学习(2)——MySQL表的增删查改(基础)

1.CRUDCRUD 即增加(Create)、查询(Retrieve)、更新(Update)、**删除(Delete)**四个单词的首字母缩写2.新增(Cteate)语法:INSERT [INTO] table_name [(column [, column] ...)] VALUES (value_list) [, (value_list)] ... value_list: value, [, value] ...语句实例-- 创建一张学生表DROP TABLE IF EXIST

2020-12-05 11:28:52 163

原创 MySQL学习(1)——MySQL数据库基础

1. 数据库的操作1.1 显示当前数据库语句实例show databases;结果演示mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || chong || mysql || performance_schema || sys

2020-12-01 20:21:55 234 1

原创 JAVA学习日记(18)——反射和枚举

1.反射1.1 定义Java的反射(reflection)机制是在运行状态下,对于任何一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意属性和方法,既然能够拿到那么我们也可以修改部分类型信息;这种动态获取信息以及调用对象方法的功能称为Java语言的反射(reflection)机制1.2 用途在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方法反射最

2020-11-25 17:20:52 227

原创 实现二叉搜索树的添加,查找和删除(JAVA)

1.二叉搜索树1.1 概念二叉搜索树又称为二叉排序树,它是一颗空树或者具有以下性质的树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树例如对上图二叉树采用中序遍历,得到的结果为:{0,1,2,3,4,5,6,7,8,9}即一颗二叉搜索树的中序遍历一定是有序的,且是从小到大进行排列2.二叉搜索树的操作创建节点,这里使用静态内部类来创建代码示例:calss BinarySearchTr

2020-11-23 12:21:55 302

原创 JAVA学习日记(17)——Map和Set

1.搜索1.1 概念及场景Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关我们之前学过的搜索方式有:直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢二分查找,时间复杂度为O(logN) ,但搜索前必须要求序列是有序的上述排序比较适合静态类型的查找,即一般不会对区间进行插入和删除操作了,而现实中业务的查找比如:根据姓名查询考试成绩通讯录,即根据姓名查询联系方式不重复集合,即需要先搜索关键字是否已经在集合中可能在查找时进行一些插入

2020-11-23 12:21:21 279 2

原创 JAVA学习日记——二叉树

1.树形结构(了解)1.1 树形概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:有一个特殊的节点,称为根节点,根节点没有前驱节点除根节点外,其余节点被分成M(M > 0)个互不相交的集合T1、T2、…、Tm,其中每一个集合 Ti (1 <= i <= m) 又是一棵与树类似的子树。每棵子树的根节点有且只有一个前驱,可以有0个或多个后继树是递归

2020-11-23 12:09:32 267

原创 JAVA学习日记(16)——泛型

1.泛型类的定义1.1 语法class 泛型类名称<类型形参列表> { // 这里可以使用类型参数 } class ClassName<T1, T2, ..., Tn> {}class 泛型类名称<类型形参列表> extends 继承类/* 这里可以使用类型参数 */ { // 这里可以使用类型参数 }class ClassName<T1, T2, ..., Tn> extends ParentClass<T1> { //

2020-11-21 08:59:29 229

原创 JAVA学习日记(15)——排序

1.概念1.1 排序排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作平时的上下文中,如果提到排序,通常指的是排升序(非降序)通常意义上的排序,都是指的原地排序(in place sort)1.2 稳定性(重要)两个相等的数据,如果经过排序后,排序算法能保证其相对位置不发生变化,则我们称该算法是具备稳定性的排序算法例如上面就是一个稳定的排序2.七种基于比较的排序 - 总览3. 插入排序3.1 直接插入排序整个区间被分为有序区间无序区间每次选

2020-11-17 15:44:36 207

原创 JAVA学习日记(14)——java对象的比较

1.问题的提出我们给定下面这样一段代码,拟定一副扑克牌,然后让它们之间进行比较代码示例:class Card { public int rank;//数值 public String suit;//花色 public Card (int rank,String suit) { this.rank = rank; this.suit =suit; }}public class TestDemo1 { public static void main(String[] args)

2020-11-16 22:56:31 113

原创 JAVA学习日记(13)——优先级队列(堆)

1.二叉树的顺序存储1.1 存储方式使用数组保存二叉树结构,方式即将二叉树用层序遍历方式放入数组中一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费这种方式的主要用法就是堆的表示例如上图,如果用数组来存储一般二叉树就会造成空间的浪费1.2 下标关系已知双亲(parent)的下标,则:左孩子(left)下标 = 2 * parent + 1右孩子(right)下标 = 2 * parent + 2已知孩子(不区分左右)(child)下标,则:双亲(parent)下标 = (chi

2020-11-16 22:55:59 147

原创 JAVA学习日记(12)——栈和队列

1.栈(Stack)1.1 概念栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据在栈顶。1.2 方法方法解释E push(E item)压栈E pop()弹栈E peek()查看栈顶元素boolean empty

2020-11-16 21:14:56 97

原创 JAVA学习日记(11)——List

1.预备知识-泛型(Generic)1.1 泛型的引入问题:我们之前实现过的顺序表,只能保存 int 类型的元素,如果现在需要保存 指向 Person 类型对象的引用的顺序表,请问应该如何解决?如果又需要保存指向 Book 对象类型的引用呢?回答:首先,我们在学习多态过程中已知一个前提,基类的引用可以指向子类的对象。其次,我们也已知 Object 是 java 中所有类的祖先类。那么要解决上述问题,我们很自然的想到一个解决办法,将我们的顺序表的元素类型定义成 Object 类型,这样我们的

2020-11-16 21:14:17 143

原创 JAVA学习日记(10)——集合框架及背后的数据结构

1.介绍Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces 和其实现类 classes 。其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索retrieve 、管理manipulate ,即平时我们俗称的增删查改 CRUD 。例如,一副扑克牌(一组牌的集合)、一个邮箱(一组邮件的集合)、一个通讯录(一组姓名和电话的映射

2020-11-16 14:46:17 199

原创 JAVA学习日记(6)——抽象类和接口

1.抽象类1.1 语法规则在上一篇文章 (参考学习日记5中打印多种形状代码) 的打印图形例子中,我们发现,父类 Shape 中的 draw 方法好像并没有什么实际工作,主要的绘制图形都是由Shape 的各种子类的 draw 方法来完成的,像这种没有实际工作的方法,我们可以把它设计成一个 抽象方法(abstractmethod)什么是抽象方法呢?一般来说,被abstrac修饰并且没有方法体的方法我们称之为抽象方法例如一道简单的面试题:所有没有方法体的方法都是抽象方法吗?错!Object类中就有很

2020-11-05 01:58:55 300

原创 JAVA学习日记(5)——面向对象编程

1.包包 (package) 是组织类的一种方式使用包的主要目的是保证类的唯一性例如, 你在代码中写了一个 Test 类,然后你的同事也可能写一个 Test 类,如果出现两个同名的类,就会冲突,导致代码不能编译通过1.1 导入包中的类Java中已经提供了很多现成的类供我们使用,例如public class Test { public static void main(String[] args) { java.util.Date date = new java.util.

2020-11-02 01:32:34 745

原创 JAVA学习日记(4)——类和对象

1.类和对象的初步认知C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题JAVA是基于面向对象,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成面向过程注重的是过程,在整个过程中所涉及的行为,就是功能面向对象注重的是对象,也就是参与过程所涉及到的主体。是通过逻辑将一个个功能实现连接起来面向过程: 1.把冰箱打开 2. 把大象放入 3. 冰箱关起来面向对象: 打开冰箱,储存,关闭都是对冰箱的操作,是冰箱的行为。冰箱就是一个对象,所以只要操作冰箱所具备的功

2020-11-01 23:12:04 320

原创 JAVA学习日记(3)——数组的定义和使用

JAVA学习日记(3)——数组的定义和使用1.数组的基本用法1.1 什么是数组数组本质上就是让我们能"批量"创建相同类型的变量例如:如果需要表示两个数据,那么直接创建两个变量即可 int a,int b如果需要表示五个数据,那么可以创建五个变量 int a1,int a2,int a3,int a4,int a5但是如果需要表示一万个数据,那么就不能创建一万个变量了,这时候就需要使用数组,帮我们批量创建注意:在Java中,数组中包含的变量必须是相同类型1.2 创建数组基本语法// 动态

2020-11-01 19:43:23 415

原创 JAVA学习日记(2)——方法的使用

JAVA学习日记(2)——方法的使用1.方法的基本用法1.1 什么是方法(method)方法就是一个代码片段,类似于c语言中的"函数"。方法存在的意义:是能够模块化的组织代码(当代码规模比较复杂的时候.做到代码被重复使用, 一份代码可以在多个位置使用让代码更好理解更简单直接调用现有方法开发, 不必重复造轮子例如一个代码:计算1!+2!+3!+4!+5!int sum = 0;for (int i = 1; i <= 5; i++) { int tmp = 1;

2020-11-01 17:21:52 163

原创 JAVA学习笔记:数据类型和运算符

1.数据类型1.1、八种基本数据类型最大值最小值默认值占用字节包装类数据类型byte2^7-1-2^701Byte字节型short2^15-1-2^1502Short短整型int2^31-1-2^3104Intrger整型long2^63-1-2^630L8Long长整型float3.4028235E381.4E - 450.0f4Float单精度浮点型double1.7976931

2020-10-10 22:19:44 357 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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