树先生の博客

更好的成为更好的你


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

Java-虚拟机学习

发表于 2020-02-20 | 分类于 Java |
字数统计: 3.1k | 阅读时长 ≈ 10
阅读《深入理解Java虚拟机》记录概要 随笔记录点Java虚拟机的内存区域方法区线程共享,存放着已被虚拟机加载的类信息、常量、静态常量、即使编译后的代码等数据 运行时常量池属于方法区,存放着编译期间生成的各种字面量和符号引用 虚拟机栈描述方法执行的内存模型,线程私有。即每个方法执行的时候会产生栈帧,栈帧中存储着局部变量表(基础类型、引用)、操作栈、动态链接、方法出口,一个方法的调用到执行就是一个栈帧在虚拟机栈中的入栈到出栈过程。 对于方法执行过程中线程请求栈的深度大于虚拟机允许的限度时会产生栈溢出异常(StackOverflowError),一般允许扩展深度,当内存不足无法申请到内存以扩展深度时则会发生内存溢出异常(OOM)。 本地方法栈和虚拟机栈很类似,只不过是服务于本地方法(Native)作用。 堆线程共享,存放着对象实例,所有的对象和数组都要在堆上分配,也是GC管理的主要区域。方便GC,更为细致可以分为新生代、老年代。Eden、from、to,总之进一步的划分是为了更好的进行垃圾回收。 程序计数器通过程序计数器来记录程序的执行位置,存储着指令的地址。 线程切换需要回到正确的执行位 ...
阅读全文 »

Kotlin-函数与lambda

发表于 2020-02-10 | 分类于 Kotlin |
字数统计: 1.1k | 阅读时长 ≈ 4
函数函数应该市不陌生了。在kotlin中使用fun标志函数。标准格式如下,返回值为Unit即空时,省略不写返回类型 123fun funName(param: ParamType): ReturnType{ } 说说和java中不一样的。也是其他现代语言基本有的特点 默认参数允许默认参数值,减少重载函数的数量。调用时后项可以省略 123fun test(name: String, age: Int = 10) { } 具名参数像php那样,不需要关注参数位置,通过按照按照参数名进行传递参数 1234567fun test(name: String, age: Int, mes: String) { }fun main() { test(age = 10, mes = "hello", name ="jack")} 在参数比较多时,使用具名参数,代码可读性大大提高 可变参数可变长参数,java中也有,相当于一个变长的数组 123456fun test(vararg strings: S ...
阅读全文 »

Kotlin-类与对象

发表于 2020-02-07 | 分类于 Kotlin |
字数统计: 3.8k | 阅读时长 ≈ 16
类与继承类的基本结构一个普通类应当包含属性、函数,构造函数,基本的样子 以下三种都是合规的申明。 123456789101112class Aclass B { }class C() { val name: String fun hello() { println("hello my namnis $name") }} 主构造函数一个对象产生必定经过类的构造函数进行构造。在类名后面使用constructor进行标志,并且添加构造参数。这就是主构造函数 123class A constructor(name: String) { } 同时constructor前面是可以写入访问控制符和注解的 123class A private constructor(name: String) { } 如果没有注解或者是访问修饰符。则就是可以略去constructor 123class A(name: String) { } ...
阅读全文 »

kotlin-协程

发表于 2019-12-19 | 分类于 Kotlin |
字数统计: 1.7k | 阅读时长 ≈ 6
第一眼在kotlin官方文档中看到协程,哇什么东西,好像很厉害的样子。而文档中讲述线程之类的却不如它多,第一是因为kotlin可以运行在jvm中,自然是可以现成用java的并发库,所以也就简单的讲了讲。第二就是它希望开发者使用协程。关于协程的概念很多,有些语言有而有些没有。这里的话我们就只讲kotlin中的协程。 what and why:什么是协程,为什么用协程关于名词解释有很多,比如官方文档:“本质上,协程是轻量级的线程”。还有“协作式”等等,乍一看,哦好像懂了。其实还是不懂,像极了学习计算机网络中的各种抽象的名词概念,而我们又拼命的想只知道这是什么,为什么叫协程。它和线程怎么比较。其实本质上名词只是指代一个具体事物的映射。所以当我们用抽象的东西去解释抽象东西,第一次真的想破头。所以我们不去管为啥叫协程,它的专业解释是什么。我们来看看它具体干了啥事,有什么用。有了具体事物就可以映射概念了。 123456fun main(args: Array<String>) { GlobalScope.launch { println("hel ...
阅读全文 »

Kotlin-基础

发表于 2019-12-12 | 分类于 Kotlin |
字数统计: 1.5k | 阅读时长 ≈ 6
首先Kotlin是可以运行再JVM中的,因为Kotlin可以编译成class,可以调用Java的库,有一定的关联程度。但是本质上上来说还是一门不同的语言,这一点要清楚。不要生硬去联想对应是Java的什么什么的。当然会有一定的关联,但那都是熟练之后考虑的事情。 hello wrold!123fun mian(args: Array<String>) { println("hello world!")} 首先kotlin文件main函数的入口不需要定义类,充分说明了kotlin是支持函数式编程的。 现代化语言不需要分号分隔行结尾 函数声明方式是形如 123fun funName(argName: ArgType): ReturnType { //} 变量声明,采用后置形式,反正有关类型定义都是后置。不论是形参变量、变量、函数变量 12fun setName(name: String){}//形参变量后置声明var num: Int = 10 基本类型Kotlin的所有东西都是对象,基础类型也是对象。所 ...
阅读全文 »

Android-NDK

发表于 2019-12-09 | 分类于 Android进阶 |
字数统计: 736 | 阅读时长 ≈ 3
What首先解释下JNI是什么,Java Native Interface,Java本地化接口。众所周知Java是跨平台的语言,依托于不同平台的JVM运行。当Java需要和原生平台进行沟通时,这个时候就需要用道JNI,通过C/C++代码来实现Java的代码,这样Java就可以和原生代码(C/C++)进行相互调用了。 NDK: Native Develop Kit,是Android提供原生开发工具包。是为了更加方便JNI的开发,同时NDK里面还包含和交叉编译等工具。 Why Java毕竟依托于JVM,本质上jdk的核心代码中的核心实现也都是去通过JNI去调用系统的库。 原生代码相对于Java来说执行效率更高。同时核心实现Java完成不了的也是需要JNI。 原生代码进行编译生成的库,相对于Java的jar来说反编译难度更大,安全性更高。 便于移植 How一个简单的JNI步骤定义文件 123456789101112131415package com.test;public class JniTest { static { System.loadLib ...
阅读全文 »

Android-相机

发表于 2019-11-27 |
字数统计: 956 | 阅读时长 ≈ 3
CameraCamera2基础概念CameraManager相机的系统服务,可以用来获得一些初步的信息和动作比如: 打开相机使用一个状态回调和一个线程handler来打开相机,继而走向stateCallback回调进行下一步操作 1manager.openCamera(cameraId, stateCallback, mBackgroundHandler); 获得相机列表一个设备存在前后置摄像头,以及外置摄像头,CameraManager可以获得摄像头ID列表 1manager.getCameraIdList(); 获得具体摄像头的描述信息1manager.getCameraCharacteristics(cameraId); CameraDevice相机设备的抽象集合,但是和Camera的API不太相同,包含的功能并没有那么多。 关闭相机 创键Capture会话 创键Capture请求 Camera2中,许多的操作都被抽象的定义为了Capture请求 比如预览连续重复的Capture请求,拍照则是一次Capture,甚至聚焦、闪关灯、等各种操作也都作为Capture的参数来 ...
阅读全文 »

Andriod下的硬编码和解码

发表于 2019-11-26 |
字数统计: 772 | 阅读时长 ≈ 2
关于音视频基础知识视频平常我们看到的视频格式其实上容器封装格式,即将音频和视频进行封装。当播放器进行播放时,通过解封这个容器拿出视频数据和音频数据分别进行解码,同步控制,再而通过不同的硬件去表现。比如mp4,avi等都是封装格式。 实际上无关乎音频的话,那就是编码压缩格式,比如h264。视频的其实是每秒30帧的图片进行播放而营造的效果。也就是说一秒会有30张图片,而一张图片如果不压缩的话,按照RGB的方式存储一个像素三个字节,那么一个1920x720的分辨率将会有5MB,光是大概算下一张图片就有这么大,那么一秒,乃至两个小时视频那就会更大了。所以就要进行编码压缩。 颜色空间 参考:YUV格式 RGB在图片上的像素点通过RGB三色通道来制造颜色,这样的话大概需要三个字节。 YUVYUV也是一中颜色空间,其中Y代表的亮度,UV控制颜色。YUV是可以通过矩阵计算和RGB进行互换的。如果一张YUV的图片的像素只有Y数据的话,整体上就表现为一张黑白的图片。 YUV的表现格式想象下我们有张黑白的图片即拥有Y向量,然后我们UV向量可以有选择给像素加上,可以理解为上色 YUV444每个像素拥有完整Y ...
阅读全文 »

Android-动画归纳

发表于 2019-10-29 | 分类于 Android |
字数统计: 7.3k | 阅读时长 ≈ 30

各种各样的动画快速归纳下

参考:Android 自定义控件三部曲中动画篇章,以及动画总结,两篇上面详细的学习

视图动画

早期android上动画是通过视图动画即Animation这个类以及超类来实现控制,通过控制View的属性,只是控制而已,并没有改变View的属性,所以我们能看到动画的效果,但是view本身的坐标以及各种属性是没有改变的,所以比如点击还是在原来的位置。

详细学习查询跳转启舰的视图动画博客

Animation的xml基础使用

可供控制的属性有很多,通过在xml文件任意的view中就能看到,其实和差不多对应了自定义控件里面的各种操作了。

  • alpha 透明度
  • scale 缩放
  • translate 平移
  • rotate 旋转
阅读全文 »

Android-自定义View之绘图

发表于 2019-08-08 | 分类于 Android |
字数统计: 780 | 阅读时长 ≈ 2
绘图建议看启舰大神的系列博客,或者《android-自定义控件》, 在android的世界里面,你所看到的所有控件本质上都是通过逻辑概念绘画给“画”上去的,比如一张图片,也是“画”上去的,而我们看到如此多的动态效果其实是在每一帧绘制不同的图像,包装下形成动画,就是这么而来的。 基本而言我们所能用到的有这么几个逻辑概念: Paint 英文词汇是绘画,是个动词,在这里我们可以理解为画笔画画这套动作,或者直接理解为画笔来表述好一点,它所能的就是“我该以什么方式来画” Canvas 画布,我们所画的东西是画在画布上,然后通过画布进而映射到屏幕上。“我可以承载画画的内容” Path 路径,点于点之间的连线 Rect 矩形 Bitmap位图 所以最基本动作就是 准备画笔 准备要画的内容 在画布上画画 画笔 The Paint class holds the style and color information about how to draw* geometries, text and bitmaps. 画笔类承载着关于如何取绘画的颜色风格。 绘制之前,我们需要了解,画笔有那些可以做 ...
阅读全文 »
12…4
hujie

hujie

慎独

34 日志
7 分类
7 标签
© 2019 — 2022 hujie
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4