Java-线程池 基础概念 线程:进程中负责执行的执行单元,一个进程中至少有一个线程,操作系统能够进行调度的最小单位 进程:一个执行中的程序的实例 多线程:解决多任务同时执行的需求,合理使用CPU资源。多线程的运行时根据CPU切换完成,如何切换由CPU确定,因此多线程具有不确定性 线程池: 基本思想是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理,当有线程任务 2019-09-13 #Java
Jetpack-LiveData简析 LiveData简介本质上是一个观察者模式,在Activity/Fragment中实现观察者,LiveData是被观察者,在LiveData存储的数据变更时触发事件。 LiveData还具有生命周期感知能力,可以控制在应用可见时去更新UI,不可见时不执行操作,减少了内存泄露问题。 LiveData示例一般情况下LiveData要配合着ViewModel一起使用,ViewModel负责触发 2019-02-15 #源码解析
Jetpack-ViewModel简析 源码分析基于androidx版本 ViewModel简介 ViewModel是用来存储和管理Lifecycle创建数据的组件,在配置发生改变或者屏幕旋转时数据仍然不会丢失。ViewModel可以负责组件间的通信,可以高效解决Activity与Fragment的通信问题。 主要的功能还是在非手动关闭以及系统回收条件下进行 Activity/Fragment的数据保存。 具有以下优势: 2019-02-15 #源码解析
Java-AQS-Condition原理及解析 AQS-Condition原理及解析Condition基础概念Condition可以理解为配合Lock使用的条件队列机制。当线程拿到锁之后,如果发现某个条件暂时不满足,就可以先进入等待;等到其他线程把条件修改完成,再显式地唤醒这些等待线程。 它解决的核心问题不是“加锁”本身,而是线程在持锁访问共享资源时,如何围绕某个条件进行等待和通知。 在synchronized体系里,线程协作主要依赖wait( 2020-10-08
LinkedHashMap简析 LinkedHashMap简析LinkedHashMap可以理解为:在HashMap的基础上,再额外维护了一条双向链表来记录节点顺序。 也正因为如此,它既保留了HashMap基于哈希桶定位元素的能力,又能让遍历结果具备稳定顺序。 LinkedHashMap是什么LinkedHashMap本质上还是一个Map结构: 允许key和value为null 默认不是线程安全的 平均情况下查询、插入、删除复 2019-03-08
Kotlin-Tips 主要用来记录Kotlin的一些关键概念 Kotlin lazy关键字 lazy用在懒初始化的场景下,在参数不使用时无需进行初始化过程。 123456class Bird(var weight:Double = 0.00,var age:Int = 1,var color:String = "blue"){ val sex : String by lazy& 2020-10-06 #Kotlin
LruCache原理 LruCache 一般来说,缓存的策略主要包含缓存的添加、获取和删除。但由于缓存的大小都是有上限的。缓存慢了之后,要想继续添加 ,就需要删除一些旧的缓存以提供空间。 所以使用到了LruCache缓存算法,即最近最少使用算法,当缓存满时,会优先淘汰掉 最近最少使用的缓存对象。 LruCache的核心原理就是利用了LinkedHashMap。 LruCache的使用12345678910int ma 2018-12-14 #源码分析
MVC,MVP,MVVM的理解 使用架构的目的是:模块内部的高内聚,模块之间的低耦合。 1.MVC模式MVC(Model-View-Controller,模型-视图-控制器)是20世纪80年代出现的一种设计模式。他用一种业务逻辑、数据、界面显示分离的方法组织代码。在Android中MVC的角色定义如下: Model(模型层):针对业务模型,建立的数据结构和相关的类,就可以理解为Model。与View无关,与业务相关。主 2018-04-15 #设计模式
RxJava 使用及解析 RxJava基本知识 RxJava是一个在JVM上使用可观测的序列来组成异步的、基于事件的程序的库。 通常情况下使用Handler、AsyncTask完成异步任务操作,当任务比较多的时候,使用这种方式就会变得相当繁琐,尤其是嵌套式的执行任务(需要上一项先完成)。 RxJava可以实现异步任务执行的前提下保持代码的清晰。通过创建一个Observable来完成异步任务,然后组合各种操作符实现不同 2019-01-10 #Hide
RecyclerView简析 RecyclerView定义 RecyclerView是一个新的组件,用来代替ListView组件的。 相比于ListView来说,RecyclerView的最大一个特性就是灵活性,主要体现在以下几个方面: 多样式:可以对数据展示进行定制,可以显示成列表,表格或者是瀑布流,你还可以自定义成任何显示样式。 局部刷新:可以刷新指定的Item或者区域 刷新动画:支持对Item的添加和移除添加动画 2018-12-20 #Android
TCP/IP协议相关 TCP/IP协议族 由一系列网络协议所组成的一个网络分层模型,是Internet的核心协议并被广泛应用于局域网和互联网。 分层 为什么要分层? 每层内部的设计可以自由改动,只需要修改替换对应分层即可 设计变得简单,分层只需要考虑当前的任务,不需要在意其他分层情况 网络的不稳定性 应用层(Application Layer) 向用户提供应用服务时通信的活动 相关协议: HTT 2020-03-31 #HTTP
WebRTC相关记录 WebRTC连接流程 当前采用服务端框架为 LiCode WebRTC通话原理及相关概念媒体协商 彼此了解对方支持的媒体格式 SDP参数含义网络协商WebRTC源码相关WebRTC业务SDK功能1.消息推送(语音电话提醒、新消息接收、对方挂断、支持拓展额外参数) 2.本地长连接(WebRTC dataChannel、保活) 3.语音通话(音频采集、降噪、回声消除、静音) 4.各种状态封装(连接 2020-08-06 #WebRTC
Kotlin-协程 协程本质上是轻量级的线程。 协程的概念协程是一种非抢占式或协作式的计算机程序并发调度的实现,程序可以主动挂起或者恢复执行。避免在异步编程中使用大量的回调,同时相比于传统的多线程技术,更容易提升系统的高并发处理能力。 线程和协程属于一对多关系,一个线程上允许存在多个协程。 线程大多数的实现是映射到内核的线程,当线程中的代码逻辑在线程抢到CPU的时间片才可以执行,否则只能等待。而协程之所以轻量级 2020-04-12 #Kotlin
final关键字 Final特性final代表了不可变,被final修饰的属性也是不可变状态,一旦被final修饰,将无法再改变这个引用。 另外final关键字还能保证线程间的同步,下面会基于JVM角度对这个特性进行分析。 Final使用方法修饰类 被final修饰的类不可以被继承,例如String、Integer,类中的方法也是默认被final修饰的。 修饰方法修饰变量Final在JVM中的体现内容引用Fina 2019-02-26 #Java
WebView相关知识 WebView是一个基于WebKit引擎,展现Web页面的控件。 主要提供以下功能: 显示和渲染Web页面 直接使用html文件做布局 可以和js进行交互 WebView基本使用添加权限AndroidManifest.xml1<uses-permission android:name="android.permission.INTERNET"/> 2019-03-12 #Android