泛型的协变和逆变是什么?对应于Java当中,协变对应的就是<? extends XXX>,而逆变对应的就是<? super XXX>。 1. 泛型的协变 1.1 泛型协变的使...
泛型的协变和逆变是什么?对应于Java当中,协变对应的就是<? extends XXX>,而逆变对应的就是<? super XXX>。 1. 泛型的协变 1.1 泛型协变的使...
感遇(一) 张九龄 兰叶春葳蕤,桂华秋皎洁。 欣欣此生意,自尔为佳节。 谁知林栖者,闻风坐相悦。 草木有本心,何求美人折。 感遇(二) 张九龄 江南有丹橘,经冬犹绿林。 岂伊...
fvm及说明 GitHub官网[https://github.com/befovy/fvm] Flutter 版本管理:一个管理 Flutter SDK 版本的简单 cli。...
结论:不要在服务端oneway接口中处理耗时操作,一旦用于高频调用,服务端又处理耗时,再偶尔碰上cpu负荷高,很可能会发生其他关键调用偶现失败的隐蔽问题,而且这个调用失败不会...
ViewPager2是在RecyclerView的基础上构建而成的,意味着其可以复用RecyclerView对象的绝大部分特性,比如缓存复用机制等。 作为ViewPager2...
一、前言 SparseArray 是 Android 在 Android SdK 为我们提供的一个基础的数据结构,其功能类似于 HashMap。与 HashMap 不同的是它...
LinkedList底层数据结构是一个具有头尾节点的双向链表。双向链表的优点就是通过某个节点访问其前驱和后驱表较方便。缺点是需要额外存储其前驱和后驱的空间。LinkeList...
Arraylist底层是由数组实现的,因此ArrayList拥有很好的随机访问能力(时间复杂度为O(1)),但是删除和添加操作性能比较差时间复杂度为O(n).因为ArrayL...
一、为什么要用线程池 在开发过程中,如果需要经常使用new Thread来处理相关任务。线程的频繁新建与销毁需要很大的开销,如何高效利用多线程处理任务,这时候就需要线程池来做...
1.集合的可变与不可变 kotlin存在三种常用的集合1.List是一个有序的,可以通过索引访问元素的集合,可以存在重复元素;2.Set是唯一元素的集合,一般来说无固定顺序;...
Android View从设计到显示到屏幕上,共用了三大步:measure、layout、draw。今天主要讲讲View是如何测量的。 以FrameLayout为例,从mea...
随着Kotlin越来越火,最近开始学习Kotlin,感觉Java和区别还是很大的,这里列举一下Kotlin和Java的一些区别; 1.打印日志 2.定义变量 3.null声明...
ViewModel注重以生命周期的方法存储和管理界面相关的数据,ViewModel类可在屏幕发生旋转等配置更改后仍然保存。在没有ViewModel之前我们保存应用是通过onS...
LiveData是Android Jetpack包提供的具有感知应用生命周期的组件,LiveData有两个子类分辨是MutableLiveData和MediatorLiveD...
1 显示系统概念 不论电脑,电视,手机,我们看到的画面都是由一帧帧的画面组成的。FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。每秒钟帧数愈...
ThreadLocal是Java提供的用来存储线程独立的数据,那当我们使用这个类时,他的数据存在哪里了呢,请看下面的代码 在上述代码中我们创建了一个ThreadLocal对象...
开发中可能会遇到要求文字根据固定宽度两端对齐的需求,比如登录的用户名标签和密码标签,但TextView没有自带这样的功能,需要自定义view来实现 Android组件有很多自...