自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java - 注解解析与自定义

一.Annotation注解的基本结构就是一个@加字符,可以放在需要修饰的类、方法、变量和参数等元素前面。Annotation并不直接影响代码的语义,但是他可以被看做是程序的工具或者类库。它会反过来对正在运行的程序语义有所影响。Annotation可以从源文件、class文件或者在运行时通过反射机制多种方式被读取。Java中有五个元注解 (即作用在其它注解的标准注解):@Retention、@Documented、@Target、@Inherited、@Repeatable。 ...

2022-04-01 16:55:18 404

原创 Jvm - 的几种常量池

一.Class 文件常量池1.class 文件中存在常量池,其在编译阶段就已经确定了。2.用javap -v 命令查看编译后的文件:javap -v ClassConstantPool.class3.class文件常量池主要存放两大常量:字面量和符号引用1.查看class字节码的具体方法先创建一个这样的类public class ClassConstantPool {private int value = 1;public String s = "abc";p...

2022-03-28 12:04:14 322

原创 Jvm - 详解四 垃圾回收算法

一.判断对象是否存活在堆里面存放着几乎所有的对象实例,垃圾回收器在对堆进行回收前,要做的事情就是确定这些对象中哪些还 是“存活”着,哪些已经“死去”(死去代表着不可能再被任何途径使用得对象了)1.引用计数算法在对象中添加一个引用计数器,每当有一个地方引用它,计数器就加1,当引用失效时,计数器减1。Python在用,但主流虚拟机没有使用,因为存在对象相互引用的情况,这个时候需要引入额外的机制来处理,这样做影响效率。2.可达性分析来判定对象是否存活的。这个算法的基本思路就...

2022-03-24 15:44:39 236

原创 jvm - 详解三 内存溢出

一.栈溢出1.参数:-Xss1m, 具体默认值需要查看官网: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BABHDABI2.HotSpot版本中栈的大小是固定的,是不支持拓展的。 java.lang.StackOverflowError3.一般的方法调用是很难出现的,如果出现了可能会是无限递归。/** * 栈溢出 -Xss1m */public class StackOverFlow ..

2022-03-24 11:58:28 2657

原创 Jvm - 详解二 从底层了解运行时数据区

一.运行测试代码1.复制运行代码让我们先贴一段代码,通过这段代码我们可以观察在运行时数据区的具体情况。/** * @author ningchuanqi * 从底层深入理解运行时数据区 * -Xms30m -Xmx30m -XX:+UseConcMarkSweepGC -XX:-UseCompressedOops * -Xss1m */public class JVMObject { public final static String MAN_TYPE = "...

2022-03-23 18:27:30 534

原创 Jvm - 详解一 运行时数据区

一.为什么说Java是一门跨平台语言Java内置JVM (java虚拟机),而JVM也是一个软件,不同的平台有不同的版本。我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件。Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。二.java程序从编译到执行的过程先看一幅图从图中可以看出,我们编写的Java文件,经由javac编译器,...

2022-03-17 17:00:29 1344

原创 Android - - - Paging3

Paging 库可帮助您加载和显示来自本地存储或网络中更大的数据集中的数据页面。此方法可让您的应用更高效地利用网络带宽和系统资源。Paging 库的组件旨在契合推荐的Android 应用架构,流畅集成其他Jetpack组件,并提供一流的 Kotlin 支持。使用 Paging 库的优势Paging 库包含以下功能:分页数据的内存中缓存。该功能可确保您的应用在处理分页数据时高效利用系统资源。 内置的请求重复信息删除功能,可确保您的应用高效利用网络带宽和系统资源。 可配置的Rec...

2022-03-04 18:05:12 2604

原创 Kotlin数据流 - - -SharedFlow

SharedFlow,此数据流会向从其中收集值的所有使用方发出数据,及类似于广播的一对多通信。导入依赖:implementation "androidx.activity:activity-ktx:1.1.0"implementation "androidx.fragment:fragment-ktx:1.2.5"object LocalEventBus { val events= MutableSharedFlow< Event>() suspend .

2022-03-02 14:31:59 2996

原创 Kotlin数据流 - - - startFlow应用

StateFlow是一个状态容器式可观察数据流,可以向其收集器发出当前状态更新和新状态更新。还可通过其value属性读取当前状态值。如需更新状态并将其发送到数据流,请为StateFlow类的value属性分配一个新值。在 Android 中,StateFlow非常适合需要让可变状态保持可观察的类。class NumberViewModel : ViewModel() { //StateFlow与liveData很像 但能使用Flow的操作符 val num...

2022-03-01 11:12:03 1734

原创 Kotlin协程 - - - Flow+Retrofit 应用

添加依赖implementation "com.squareup.retrofit2:retrofit:2.9.0"implementation "com.squareup.retrofit2:converter-gson:2.9.0"implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"implementation 'androidx.recyclerview:recyclerview:1.2.1'...

2022-02-28 17:41:55 1929

原创 Kotlin协程 - - - Flow+Room 数据库

导入依赖:implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"def room_version = "2.3.0"implementation "androidx.room:room-runtime:$room_version"implementation "androidx.room:room-ktx:$room_version"kapt "androidx.room:room-compiler:$room_ve..

2022-02-25 16:36:58 1142

原创 Kotlin 协程+flow 下载案例

//扩展方法 读写文件并返回,下载进度inline fun InputStream.copyTo(out: OutputStream, bufferSize: Int = DEFAULT_BUFFER_SIZE, progress: (Long)-> Unit): Long { var bytesCopied: Long = 0 val buffer = ByteArray(bufferSize) var bytes = read(buffer) whi...

2022-02-23 15:20:46 1054

原创 Kotlin协程 - - - Channel

一.ChannelChannel实际上是一个并发安全的队列,它可以用来连接协程,实现不同协程的通信。1.Channel的使用导入依赖 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0-RC-native-mt' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0-RC-native-mt...

2022-02-18 16:15:10 990

原创 Kotlin数据流 - - - Flow

一.Flow的简单使用

2022-02-17 17:25:43 1739

原创 Kotlin协程 - - -上下文与异常处理

一.协程上下文1.协程的上下文的组成CoroutineContext是一组用于定义协程行为的元素。它由如下几项构成。Job:控制协程的生命周期CoroutineDispatcher:向合适的线程分发任务CoroutineName:协程的名称,调试的时候很有用CoroutineExceptionHandler:处理未被捕捉的异常2.组合上下文中的元素 fun testCoroutineContext() = runBlocking { //这里把...

2022-02-16 14:47:07 623

原创 Kotlin协程 - - -启动与取消、作用域

一.协程的启动1.协程构建器launch与async构建器都用来启动新协程:launch,返回一个Job并且不附带任何结果值。async,返回一个Deferred,Deferred也是一个job,可以使用await在一个延期的值上得到它的最终结果。fun main() { testCoroutine();}// runBlocking 主协程 他会等子协程任务执行完再关闭,在此之前都是堵塞状态fun testCoroutine()= runBlock...

2022-02-15 17:04:14 1250 1

原创 Kotlin协程 - - - 协程的简单使用

一.协程介绍1.简介协程是一种并发设计模式,您可以在 Android 平台上使用它来简化异步执行的代码。协程是在版本 1.3 中添加到 Kotlin 的,它基于来自其他语言的既定概念。在 Android 上,协程有助于管理长时间运行的任务,如果管理不当,这些任务可能会阻塞主线程并导致应用无响应。使用协程的专业开发者中有超过 50% 的人反映使用协程提高了工作效率。本主题介绍如何使用 Kotlin 协程解决以下问题,从而让您能够编写出更清晰、更简洁的应用代码。2.特点协程是我们...

2022-02-14 17:49:37 4653

原创 JetPack - - -WorkManger

一.WorkManger的作用与特点1.WorkManager的作用多在后台执行任务的需求是非常常见的,Android也提供了多种解决方案,如JobScheduler、Loader、Service等,如果这些AP|没有被恰当使用,则可能会消耗大量电量。Android在解决应用程序耗电问题上做了各种尝试,从Doze到AppStandby,通过各种方式限制和管理应用程序,以保证应用程序不会在后台消耗过多的设备电量。WorkManager为应用程序中那些不需要及时完成的任务提供了一...

2022-02-14 11:10:18 180

原创 JetPack - - - Navigation

1.Navigation的诞生Activity嵌套多个Fragment的UI架构模式已经非常普遍,但是对Fragment的管理一直是一件比较麻烦的事情。我们需要通过FragmentManager和FragmentTransaction来管理Fragment之间的切换。页面的切换通常还包括对应用程序Appbar的管理、Fragment间的切换动画,以及Fragment间的参数传递。纯代码的方式使用起来不是特别友好,并且Fragment和Appbar在管理和使用的过程中显得混乱。为此,Jetpac...

2022-01-07 11:35:40 1492

原创 JetPack - - - Room的基础使用

Android采用SQLite作为数据库存储,开源社区常见的ORM(Object Relational Mapping)库有ORMLite,GreenDAO等。Room和其他库一样,也是在SQLite上提供了一层封装。一.Room使用1.Room重要概念Entity:实体类,对应的是数据库的一张表结构,使用注解@Entity标记。Dao: 包含访问一系列访问数据库的方法,使用注解@Dao标记。Database: 数据库持有者,作为与应用持久化相关数据的底层连接的主要...

2021-12-30 15:42:12 1484

原创 JetPack - - - DataBinding

DataBinding的作用让布局文件承担了部分原本属于页面的工作,使页面与布局耦合度进一步降低。DataBinding的应用1.简单应用首先在gradle中配置android { ... buildFeatures { dataBinding = true }}我们先写一个要在Xml文件引用的数据类public class Idol { public String name; ...

2021-12-22 15:11:58 815

原创 JetPack - - - LifeCycle、ViewModel、LiveData

Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法、减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者可将精力集中于真正重要的编码工作。JetPack的优点:遵循最佳做法: AndroidJetpack组件采用最新的设计方法构建,具有向后兼容性,可以减少崩溃和内存泄露。消除样板代码:AndroidJetpack可以管理各种繁琐的Activity(如后台任务、导航和生命周期管理),以便您可以专注于打造出色的应用。减少不...

2021-12-20 15:42:09 190

原创 Kotlin基础 java与Kotlin互相操作

一.Kotlin调用java1.调用java可空属性Java世界里所有对象都可能是nu当一个Kotlin函数返回String类型值,你不能想当然地认为它的返回值就能符合Kotlin关于空值的规定。fun main() { val jhava = Jhava() //平台类型 val nullss = jhava.nullss val stringss = jhava.strings //这里用了java的属性,因为java...

2021-12-13 18:04:24 1558

原创 Kotlin基础 函数式编程

一个函数式应用通常由三大类函数构成:变换transform、过滤filters合并combineo每类函数都针对集合数据类型设计,目标是产生一个最终结果。函数式编程用到的函数生来都是可组合的,也就是说,你可以组合多个简单函数来构建复杂的计算行为。一.变换变换是函数式编程的第一大类函数,变换函数会遍历集合内容,用一个以值参形式传入的变换器函数,变换每一个元素,然后返回包含已修改元素的集合给链上的其他函数。最常用的两个变换函数是ma...

2021-12-13 16:07:04 1555

原创 Kotlin基础 扩展

一.扩展函数1.定义普遍扩展函数 扩展可以在不直接修改类定义的情况下增加类功能,扩展可以用于自定义类,也可以用于比如List、String,以及Kotlin标准库里的其他类。和继承相似,扩展也能共享类行为,在你无法接触某个类定义,或者某个类没有使用open修饰符,导致你无法继承它时,扩展就是增加类功能的最好选择。//自定义扩展函数,在String后面拼接!fun String.addExt(amount :Int =1)=this+"!".repeat(am...

2021-12-13 14:38:07 1362

原创 Kotlin基础 泛型

一.泛型类1.定义 泛型类的构造函数可以接受任何类型。 // 泛型class MagicBox<T>(item : T) { var available =false; private var subject:T =item }class Box(val name:String,val age:Int)class Man(val name:String,val age:Int)...

2021-12-08 17:23:54 126

原创 Kotlin基础 对象与类、接口

一.对象1.object关键字 使用object关键字,你可以定义一个只能产生一个实列的类-单例1.对象声明 对象声明有利于组织代码和管理状态,尤其是管理整个应用运行生命周期内的某些一致性状态。//object 表示单例object ApplicationSingle { init { print("ApplicationSingle") } fun setMatt...

2021-12-08 14:13:06 164

原创 Kotlin基础 定义类与初始化、继承

一.定义类1.field 针对你定义的每一个属性,Kotlin都会产生一个field,一个getter,以及一个setter,field用来存储属性数据,你不能直接定义field,Kotlin会封装field,保护它里面的数据,只暴露给getter和setter使用。属性的getter方法决定你如何读取属性值,每个属性都有getter方法,setter方法决定你如何给属性赋值,所以只有可变属性才会有setter方法,尽管Kotlin会自动提供默认的getter和se...

2021-12-05 15:38:19 704

原创 Kotlin基础 常用集合List、Set、Map的使用

集合是我们常用的一种数据结构,可以作为值传给函数,和我们学过的其他变量类型一样,List、Set、Map的类型分为两类,只读和可变。一.List集合1.List创建与元素获取 getOrElse是一个安全索引取值函数,他需要两个参数,第一个是索引值,第二个是能提供默认值的lambda表达式,如果索引值不存在的话,可用来代替异常。 getOrNull是Kotlin提供的另一个安全索引取值函数,它返回null...

2021-12-03 17:21:42 739

原创 Kotlin基础 字符串操作与数字类型转换、标准库函数

一.String操作1.substring 字符串截取,substring函数支持IntRange类型(表示一个整数范围的类型)的参数,until创建的范围不包括上限值(包前不包后)。const val NAMES="jack,xiao,jason"fun main() { //包前不保后 val substring = NAMES.substring(0 until 3) pr...

2021-12-02 15:55:05 2763

原创 Kotlin基础 空安全与异常

一. 空安全 1.null Kotlin会把可能出现null问题,在编译时以报错的方式,提前在编译期强怕我们重视起来,而不是等到运行时报错,防范于未然。2.Kotlin的null类型 在Kotlin中我们可以这样来定义空类型。//想要把属性设置为空需要在类型处加? var str:String?= readLine() str=null println("input:$str")3.空安全 ...

2021-11-27 17:29:01 1185

原创 Kotlin基础 匿名函数与函数类型

一.匿名函数 1.写法 定义时不取名字的函数,我们称之为匿名函数,匿名函数通常会将整体传递给其他的函数,或者从其他函数返回。 匿名函数对Kotlin来说很重要,我们能根据需要制定特殊规则的函数。 //判断里面有多少个s val totals: Int = "PanamaCanal".count() { letter -> letter == 'n' }...

2021-11-27 16:13:08 418

原创 Kotlin基础 变量定义、条件语句、函数

kotlin是一个用于现代多平台应用的静态编程语言,支持多平台编程是科特林的主要优势之一。它减少了为不同平台编写和维护相同代码的时间,同时保留了本地编程的灵活性和优势,最后Kotlin已成为Android的官方发开语言。一.变量1.变量声明 // val定义关键字 s变量名字 String变量类型 = 赋值运算符 1234567赋值 val s : String = "1234567"; 2.Kotlin内置数据类型3.只读变...

2021-11-20 16:53:58 2505

原创 Kotlin generateSequence()序列构造函数

一般针对某个序列,你可能会定义一个只要序列有新值产生就被调用一下的函数,这样的函数叫迭代器函数。generateSequence 函数接受一个初始种子值作为序列的起步值,在用generateSequence 定义的序列上调用一个函数时,generateSequence 函数会调用你指定的迭代器函数,决定下一个要生产的值。1.我们先来个运算扩展函数// 这方法为Int的扩展函数fun Int.isPrime():Boolean{ //从2为起始数到本身的循环 (2 un...

2021-09-15 15:23:57 524

空空如也

空空如也

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

TA关注的人

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