自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(133)
  • 资源 (3)
  • 收藏
  • 关注

原创 (四) SystemServer进程

SystemServer处理过程作用:创建系统,我们所熟悉的AMS、WMS、PMS等都是由其创建的;前面我们说了在ZygoteInit.main()方法中调用startSystemServer()启动了SystemServer进程后,进入SystemServer进程完成剩余处理工作:启动Binder线程池执行SystemServer.main()在创建SystemServer进程后,会调用handleSystemProcess()方法来完成处理过程: private static void

2021-08-12 17:56:24 384

原创 (三) Zygote进程启动过程

zygote进程前面我们说了Zygote进程是在init进程中启动的,在启动时会创建一个Davlik或者ART;该进程主要作用:fock自身创建应用程序进程和SystemSever进程Zygote进程启动是从App_main.cpp的main()–>AppRuntime.start()开始的:int main(int argc, char* const argv[]){while (i < argc) { if (strcmp(arg, "--zygote") =

2021-08-12 16:48:12 389

原创 (二) android系统启用过程

Android系统启动过程当我们按下电源键,引导芯片代码从预定义的地方(固话在ROM中)开始执行,加载引导程序Bootloader到RAM中,然后执行;BootLoader是android系统中的一个小程序,主要是将系统OS运行起来;启动Linux内核,在系统文件中寻找init.rc文件,并启动init进程;第一步:init进程启动该进程是android系统中用户空间启动的第一个进程,进程号为1;该进程由多个源文件组成,这些文件位于/system/core/init中该进程主要作用:初

2021-08-12 16:47:20 173

原创 (一) android系统架构

Android系统架构1、应用层系统应用程序和我们开发的应用程序都位于该层,通常由java进行开发;作用:负责与用户直接进行交互2、应用框架层作用:为应用层提供APP开发所需的API,由java语言编写3、系统运行库层由C++程序库和android运行时库两部分组成;Android运行时库层:又有核心库和ART两部分组成(android5.0后,Dalvik虚拟机有ART替代);Dalvik虚拟机与ART区别Dalvik虚拟机:允许在有限的内存中同时运行多个虚拟机实例,并且每一个Dal

2021-08-12 14:33:10 260

原创 (二) android系统启用过程

Android系统启动过程当我们按下电源键,引导芯片代码从预定义的地方(固话在ROM中)开始执行,加载引导程序Bootloader到RAM中,然后执行;BootLoader是android系统中的一个小程序,主要是将系统OS运行起来;启动Linux内核,在系统文件中寻找init.rc文件,并启动init进程;第一步:init进程启动该进程是android系统中用户空间启动的第一个进程,进程号为1;该进程由多个源文件组成,这些文件位于/system/core/init中该进程主要作用:初

2021-08-12 14:28:16 129

原创 65536限制

65536限制随着音乐越来越来越大,引入的库越来越多,应用中引用的方法数量不能超过65536个。主要原因是:DVM指令集的方法调用指令invoke-kind索引为16bits,最多只能引用65536个;

2021-07-08 11:22:16 342

原创 Instant Run运行机制

Instant Run是AS 2.0退出的一个运行机制,减少第二次及以后构建、部署时间。之前传统的应用编译部署流程:传统的编译部署流程,需要重新安装并且重启APP,而Instant Run不会重启安装APPInstant Run 的构建、部署是基于更改部分代码,而部署分为三种方式:Cold Swap:需要重启APP,重启Activity,比如:修改、删除、添加一个字段、方法,添加一个类等Warm Swap:不需要重启APP,需要重启Activity,比如:修改或者删除一个现有资源文件时改或

2021-07-08 11:12:20 137

原创 DataBinding(一)绑定表达式

以前布局文件通常只负责:UI控件的布局工作;页面(Activitity):负责通过setContentView()方法关联布局文件,再通过UI控件的id找到控件,对控件进行操作;DataBinding的出现:让布局文件承担以前页面的部分工作,是页面与布局文件耦合度进一步降低;部分与UI相关的代码可以放到布局文件不在需要findViewById()布局文件可以包含简单的业务逻辑,UI控件能直接与数据模型中的字段绑定;DataBinding-绑定表达式在项目中使用DataBinding,需要在m

2021-03-12 17:02:06 434

原创 java中Lambda表达式

Lambda表达式看做匿名函数;没有名称,但是有参数列表、返回类型、可能还有一个可以抛出的异常列表特性:匿名—:不像普通方法一样有特定方法名称函数—:不像方法属于某个特定的类传递—:可以作为参数传递给方法或者存储在变量中简洁—:不需要像匿名类那样写许多模板代码1、语法格式(参数列表)->单表达式或者(参数列表)->{语句表达式}第二种形式:必须显示使用return语句来返回值***关于参数列表:即使没有参数,也必须有小括号"()"如果只有一个参数,并且参数型可以

2020-11-05 11:25:53 282 1

原创 第九章 默认发冲突解决机制

默认方法冲突解决机制Java8引入默认方法后,也就伴随这一个问题:有可能出现一个类继承了多个方法,而这些方法签名相同;这种情况类如何确定选择的使用哪一个方法?遵循以下三条规则:类中的方法优先级最高(类比接口中的优先级高),类或者父类中***声明(定义处)***的方法优先级高于任何声明为默认方法的优先级;如果第一条无法判断,那么子接口的优先级高于父接口:函数签名相同时,优先选择最具体实现的默认方法的接口,即B继承A接口,那么B就比A具体;如果以上两条还是无法判断,实现了多个接口的类就必须

2020-09-18 15:59:31 191

原创 (五)Class类文件结构

Class类文件结构注意一下讲解都是基于该Class文件结构;任何一个Class文件都对应着一个类或者接口的定义信息;Class文件是一组以8位字节为基础单位的二进制流;Class文件存储结构:只有两种数据类型:无符号数和表无符号数无符号数属于基本数据类型:以u1、u2、u4、u8来代表一个字节、两个字节、三个字节、四个字节的无符号数作用:可以用来描述数量值、索引引用、数字或者按照utf-8编码构成的字符串值;表是由无符号数和其他表作为数据项构成的复合数据类型,所有表都一般以"_info

2020-07-17 15:35:20 262

原创 (四)内存分配与回收策略

#内存分配与回收策略 #一般情况对象分配在新生代的eden区,当eden区没有足够的内存进行分配时,虚拟机将发起一次minor GC(新生代GC)大对象直接进入老年代;虚拟机提供了一个参数-XX:pretenureSizeThreshold,当创建的对象大于该阀值,该对象将直接在老年代分配(目的:避免eden区和两个survivor区大量的复制操作);注意:该参数只对serial和parNew虚拟机有用长期存活的对象进入老年代;(eden区创建分配的对象,经过第一次Minor GC仍然活着并且sur

2020-07-17 15:34:34 136

原创 (三)垃圾收集器和内存分配策略

(三)垃圾收集器和内存分配策略判断对象存活算法1、引用计数法给对象添加一个引用计数器,当一个地方引用该对象时,计数器加1,当引用失效时,计数器减1;当计数器为0时,该对象就会被回收;缺陷:当两个对象互相引用时,导致其计数器不为0,实际上对象已经不再被使用,从而无法被GC回收;ObjA.instance=ObjB;ObjB.instace=objA;虽然此时,这两个对象已经无任何引用,实际上着两个对象,已经无法被访问了,但他们query彼此持有对方引用,导致计数器部位0;[外链图片转存失败,

2020-07-17 15:33:35 149

原创 (二)对象创建、布局、访问

对象在堆中1.创建对象这里的对象(指普通对象,不包括数组、Class对象等);虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一***个类的符号引用***,并且检查这个符号引用代表的类是否被加载、解析、或初始化过,没有先执行类加载过程,接下来为对象分配内存,并执行方法为字段赋初始化值;2. 对象在java堆内存中的布局对象在内存中存储的布局分为:对象头、实例数据、对齐填充;对象头:包括两部分(1)、存储对象自身的运行时数据(如:哈希码、GC分代年龄、锁状态标志、线程持

2020-07-17 15:32:07 126

原创 (一)java内存区域

java内存区域java虚拟机在执行java程序的过程会把管理的内存划分为不同的数据区域;java虚拟机管理的内存包含以下运行时数据区域:程序计数器(线程私有)java虚拟机栈(线程私有)方法区堆本地方法栈(线程私有)线程私有的运行时数据区域随着线程的启动、结束而建立、销毁;而共享内存区域随着虚拟机进程的启动而存在;1. 程序计数器是一块较小内存空间,可以看做当前线程所执行的字节码的行号指示器;java虚拟机的多线程是通过轮流线程切换并分配处理器执行时间的方式实现的。任何时刻,一

2020-07-17 15:31:33 150

原创 (二十一) Sed编辑器高级部分

Sed编辑器高级部分前一篇文章 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ICld7aAU-1593574447297)(https://blog.csdn.net/Leslie_LN/article/details/106852597)]我们介绍的所有sed编辑器命令都是针对的***一行数据***进行操作的;假如我们要匹配查找“this is leslie”短语,但如果这个短语分布在两行,用普通sed编辑器命令来处理文本就不可能成功;针对这种情况,sed编辑器包含了三

2020-07-01 11:34:10 265

原创 (二十) 正则表达式

(二十) 正则表达式正则表达式时你定义的模式模板,Linux工具可以用它来过滤文本。Linux工具如:sed编辑器能够在处理数据时使用正则表达式对数据进行模式匹配;星号通配符(*):匹配任意个字符包括0个字符;1.1 正则表达式类型Linux中不同的应用程序可能会使用不同的正则表达式包括:编程语言(Java、Perl)、Linux使用工具(如:sed编辑)以及主流应用(MYSQL)正则表达还是是通过正则表达式引擎(是一套底层软件)实现的:负责解释正则表达式模式并使用这些模式进行文本匹配;在Lin

2020-06-19 11:18:41 503

原创 (十九) Sed编辑器

Sed编辑器前面我们介绍了普通的交互式编辑器(Vim),可以通过键盘命令来交互式插入、删除、或替换文本中的数据,这儿会在解说Linux中两个广泛使用的命令行编辑器:sed和gawk;能够轻松实现自动化格式化、插入、修改、删除文本等;1. Sed编辑器基础又称为流编辑器(Stream editor),通过处理数据前基于事先提供的一组规则来编辑数据流;sed编辑器可以通过命令来处理数据,这些命令来自:命令行输入命令文本文件编辑器执行的流程:一次读取一行数据根据提供的编辑器命令匹配数据按

2020-06-19 11:17:47 301

原创 (十七) 函数

十七 函数函数是一个脚本代码块,在代码任何位置中重用;使用时通过函数名调用既可;1.1 创建函数bash shell有两种常见函数的方式:采用关键字function如常见编程语言的函数定义方式1.1.1 function关键字方式创建函数格式: function 函数名{ 命令 }在同一脚本中定义的函数名必须是唯一的;1.1.2 常见编程语言的函数定义方式格式: 函数名(){ }注意:在脚本中如果函数定义前调用函数就会报错;即调用必须在定义之后;如

2020-06-18 16:45:20 231

原创 (十六) 信号

十六 信号、定时及周期性运行脚本到目前为止,我们运行脚本是通过:实时模式在命令行界面运行,除此之外,还有很多种运行脚本方式。另外还有一些选项用于控制脚本,这些控制方法包括:向脚本发送信号、修改脚本优先级、在脚本运行时切换到运行模式;Linux最常见的系统信号:默认情况下,bash shell会忽略任何收到的SIGQUIT和SIGTERM信号(正因这样,交互式shell才不会被意外终止)1.1 处理信号Linux利用信号与系统中的进程进行通信,利用这些信号来停止、启动、终止进程;1.1.1 生成

2020-06-17 15:40:01 305

原创 (十五) 脚本输出重定向

十五 脚本输出重定向前面我们说了运行脚本,数据要么都是打印在屏幕,要么输出重定向到文件中;这儿我们要讲的是如何教脚本的输出重定向到系统的不同位置;文件描述符:用来标识每个文件对象,是一个非负整数,可以唯一标识会话中打开的文件;Linux系统将每个对象当做文件处理。这里包括输入进程和输出进程。每一个进程一次最多可以有九个文件描述符;处于特殊目的,bash shell保留了前三个文件描述符(0、1、2),用于处理脚本的输出、输入,用他们将shell默认的输出、输入导向相应的位置;这三个特殊文件描述符用

2020-06-17 15:38:49 1836

原创 (十四) 处理用户输入

14 处理用户输入1. 脚本与使用者的交互使用者在运行脚本时,向脚本传递数据,脚本可以通过一些不同的方法来从用户处获取数据:命令行参数(添加在命令后的数据)命令行选项(看修改命令行行为的单个字母)直接从键盘读取###1.1 命令行参数 ###如: ./test 20 10(每个参数用空格隔开)命令行参数可以是数值,也可以使文本字符串;文本字符串的需要注意的是:当遇到单个文本字符串有空格需要使用单引号或者双引号圈住该字符串,否则shell会将空格当成两个值的分隔符;这里的引号并非数

2020-06-17 15:37:48 288

原创 Shell脚本基础

(十三) Shell脚本基础在shell命令行界面可以同时执行多个命令,命令之间用***分号隔开***创建Shell脚本在Shell脚本中以“#”开头的行表示注释行,但是第一行例外 #!/bin/bash'#'号后面的!告诉Shell是用哪个Shell来运行脚本;当我们编写号脚本文件是,执行该脚本文件,面临的一个问题:让Shell找到你的脚本文件有两种方式:将脚本文件所在目录添加到PATH环境目录中用绝对路径、相对路径来引用脚本文件在脚本文件中使用变量环境变量在脚本文件中的环

2020-06-17 15:37:21 183

原创 十二 Shell脚本-结构化命令

十二 Shell脚本-结构化命令对脚本中的命令施以逻辑流程控制,这类命令会根据条件是脚本跳过某些命令,这样的命令就叫做结构化命令;1、if-then语句语法: if 命令 then 命令 fi执行逻辑为:执行if后的命令,该命令退出状态码为0(成功执行),然后执行then后的命令,否则不执行执行then后的命令,继续执行脚本中的下一条命令;then部分可以使用不止一条命令,可以有多条命令构成一个像java中的语句块;2、 if-then-else语法: if 命令 the

2020-06-17 15:36:07 358

原创 软件安装、管理、删除

(五)软件安装、管理、删除Linux开发人员已经将软件打包成更加易于安装的预编译包。各种Linux发行版本都采用包管理系统(PMS)来控制软件和库的安装;PMS利用数据库来记录相关内容:系统上安装了什么软件包每个包安装了什么文件每个已安装软件百的版本软件包存储在服务器(称为仓库),利用本地系统的PMS工具访问互联网。PMS工具:搜索、更新安装软件包;对于bash shell命令不管什发行版本都能工作,但是PMS工具及相关命令,在不同发行版本上有很大区别;Linux两种主要的PMS工具:

2020-06-17 15:35:27 208

原创 (四)文件权限管理

文件权限管理Linux中每个文件都有文件所有者、所在组;每个文件创建所有者:一般哪个用户创建了该文件,所有者就是谁;所在组:默认这个文件所在组即为该创建文件用户所在组;查看文件所有者:语法:ls -lah修改文件所有者、所在组修改文件所有者:语法:chown 所有者名 文件路名1、修改单个文件所有者:chown 所有者 文件名2、修改目录下所有文件(包括子目录、子目录下的文件)所有者:语法:chown -R 所有者 目录3、同时修改单个文件/目录下所有者和所在组语

2020-06-17 15:34:28 224

原创 (一)Linux之用户管理

Linux之用户管理Linux是一个多用户多任务操作系统;任何使用系统资源的用户,都必须向系统管理员申请一个账号,然后以这个账号进入系统;一个用户至少属于一个组;用户创建用户***语法:***useradd 用户名会创建一个用户,并且会创建一个用户组(同用户名的组),该用户属于该用户;(在/home目录下就会看见对应用户名的文件)如果要讲用户放在指定目录下,可以:***语法:***useradd -d 指定目录 用户名创建用户并且指定组名:***语法:***useradd -g 组名 用

2020-06-17 15:33:50 273

原创 (三)Linux之运行级别、找回root密码

Linux之运行级别、找回root密码Linux系统划分了7个运行级别:0:关机1:单用户(找回丢失密码)2:多用户无网络服务3:多用户有网络服务4:系统未使用保留给用户5:图形界面6:重启这些级别配置文件:/etc/inittab[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n4esutrY-1592379132355)(http://linleslie.test.upcdn.net/linux/%E8%BF%90%E8%A1%8C%E7%BA%A7%E

2020-06-17 15:32:50 147

原创 (二)Linux之实用指令

Linux之实用指令ls指令语法: ls [选项] [目录或者文件]常用选项: -a:显示当前目录的所有文件和目录,包括隐藏的; -l:以列表方式显示cd指令/:是系统根目录绝对路径:/目录形式相对路径:…:表示上一级目录如: cd ..:回到上一级目录mkdir创建目录***语法:***mkdir [选项] 创建的目录名常用选项: -p:创建多级目录rmdir删除空目录,注意:目录下有内容该目录不能被删除;语法: rmdir [选项] 删除的空目录如果要删

2020-06-17 15:31:48 194

原创 绘制系列(十八)图形篇-Bitmap

图像与图形处理Canvas中就保存着一个Bitmap对象,调用canvas的各种绘图函数,最终还是绘制到其中的Bitmap上。我们自定义View是,一般都会重写onDraw(Canvas canvas),这个函数中是自带Canvas的,只需要将画的内容调用Canvas的函数画出来,就会直接显示在对应的View上。其实,View对应着一个Bitmap,而onDraw()中canvas就是通过这个B...

2019-12-27 18:25:28 1973 1

原创 绘制系列(十八)-自定义Drawable

自定义Drawablepublic class RoundRectDrawable extends Drawable { public RoundRectDrawable(Bitmap bitmap) { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mBitmap=bitmap;}public Paint getPaint...

2019-12-26 18:03:33 389

原创 绘制系列(十七)-Drawable

DrawableShape标签与ShapeDrawable首先明确一点的是:shape标签对应的java类是GradientDrawable,而不是ShapeDrawable; ShapeDrawable drawable = (ShapeDrawable) ((TextView) findViewById(R.id.tv)).getBackground();将报:public G...

2019-12-26 18:02:52 268

原创 绘制系列(十六)-Canvas与图层二

Canvas涉及的flag讲解上一篇博客,我们说到canvas的六个flag,这里简单的演示六个flag的作用。这里有个问题,一下演示在Addriod6.0以下的手机上有效果,在6.0的手机上失效,不知道是什么原因。知道可以在下面评论给我说说…save(int flags)、saveLayer(int flags)都可以设置标志位,All_save_flag、matrix_save_flag...

2019-12-26 18:01:32 557

原创 绘制系列(十五)-Canvas与图层

绘制系列(十五)-Canvas与图层onDraw、dispatchDraw区别onDraw()的意思是绘制视图自身dispatchDraw()是绘制子视图无论是View还是ViewGroup对它们俩的调用顺序都是onDraw()->dispatchDraw()但在ViewGroup中,当它有背景的时候就会调用onDraw()方法,否则就会跳过onDraw()直接调用dispatc...

2019-12-26 18:00:56 710

原创 自定义View之动画篇(十四)图形篇-SVG矢量图

SVGSVG全称是Scalable Vector Graphics (可缩放矢量图),SVG是矢量图,与其对应的是Bitmap即位图;Google在Android 5.0中增加了SVG支持,而对于5.0以下,可以引入com.android.support:appcompat-v7:23.4.0及以上版本进行支持;Vector标签适用于android2.1以上的所有系统以显示SVG图像,而与SV...

2019-12-04 17:12:38 383

原创 自定义View之动画篇(十三)动画进阶-PathMeasure

动画进阶当我们实现更复杂的动画时,如nexus开机动画,前面的属性动画、容器动画就实现不了。PathMeasure实现路径动画其实就是一个Path路径点的坐标追踪,可计算出指定路径的一些信息如总路长、指定长度所对应的坐标点;要计算,肯定就需要和路径绑定:两种方式: PathMeasure pm=new PathMeasure(); pm.setPath(Path path,bo...

2019-12-03 17:02:32 160

原创 自定义View之动画篇(十二)-ViewPropertyAnimator

ViewPropertyAnimatorandroid 3.0虽然引入的属性动画,既能针对一些系统定义的属性如setAphla()、setScale()做动画,也能自定义属性;我们日常使用中存储需要为这些默认的属性设置动画,但通过属性动画使用显得很繁琐不人性化,于是android 3.1补充了ViewPropertyAnimator这个机制; ViewPropertyAnimator anim...

2019-11-29 17:36:08 270

原创 自定义View之动画篇(十一)-PropertyValueHolder与KeyFrame

PropertyValuesHolder与KeyFrameValueAniamtor、ObjectAnimator除了ofInt()、ofFloat()、ofObject()构建对象外,还用一个方法也能构建对象: /** * valueAnimator的 */ public static ValueAnimator ofPropert...

2019-11-28 15:22:37 389

原创 自定义View之动画篇(十)-属性动画之—AniamtorSet(组合动画)

属性动画之—组合动画(AnimatorSet)前面我们说过借助PropertyValuesHolder,也可以实现多个动画同时作用于同一控件,AnimatorSet为官方给出的组合实现。首先明确的一点是,组合动画对ValueAniamtor和ObjectAnimator都适用,但是一般ObjectAniamtor组合动画最常用。直接给为我们提供了两个方法playSequentially和pla...

2019-11-27 17:26:17 272

原创 自定义View之动画篇(九)-ObjectAnimator基本使用

ObjectAnimatorValueAnimator缺点:只能对数值进行动画运算。比如需要对控件进行操作需要,监听数值变化,在监听中对控件进行操作,比较麻烦。为了直接与控件相关联,ObjectAnimator应运而生。ObjectAnimator也重写了ofInt()、ofFloat()等以ofFloat(View target,String propertyName,float…val...

2019-11-27 17:00:17 642

数据结构与算法分析:Java语言描述

数据结构与算法分析:Java语言描述,最新高清版

2019-04-25

JAVASCRIPT入门经典 第6版

JAVASCRIPT入门经典 第6版。。。。。。。。。。。。。。。。。.................................................

2017-11-21

空空如也

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

TA关注的人

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