Wxy's Blog
  • 首页
  • 归档
  • 标签
  • 关于
  • 友链
  •   
  •   
不因虚度年华而悔恨,不因碌碌无为而羞愧

WebRTC音频处理模块相关

WebRTC源码基于提交版本4c2f9c9 WebRTC音频处理模块,负责在传输音频时对音频进行一定的处理,例如降噪、增益、回声消除,整体模块代码位于modules/audio_processing。 按照以下模块分别介绍,各模块的功能以及相关配置和源码解析 默认音频处理配置如下: 1234567891011121314AudioOptions options; options.echo_ca

2020-08-14
WebRTC

LeetCode Hot 100

LeetCode 1:两数之和 12345678910111213141516171819class Solution { public int[] twoSum(int[] nums, int target) { int[] result = new int[2]; Map<Integer,Integer> map = new H

2020-08-03
算法

OkHttp-HTTPDNS实践

2020-02-19
设计方案

Java-线程池

基础概念 线程:进程中负责执行的执行单元,一个进程中至少有一个线程,操作系统能够进行调度的最小单位 进程:一个执行中的程序的实例 多线程:解决多任务同时执行的需求,合理使用CPU资源。多线程的运行时根据CPU切换完成,如何切换由CPU确定,因此多线程具有不确定性 线程池: 基本思想是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理,当有线程任务

2019-09-13
Java

Jetpack-ViewModel简析

源码分析基于androidx版本 ViewModel简介 ViewModel是用来存储和管理Lifecycle创建数据的组件,在配置发生改变或者屏幕旋转时数据仍然不会丢失。ViewModel可以负责组件间的通信,可以高效解决Activity与Fragment的通信问题。 主要的功能还是在非手动关闭以及系统回收条件下进行 Activity/Fragment的数据保存。 具有以下优势: 与UI层

2019-02-15
源码解析

Jetpack-Lifecycle简析

Lifecycle简介Google官方提供的一个生命周期感知组件。可以由引用组件自己进行生命周期管理,从而减少内存泄露以及异常的可能性。 让我们自己创建的对象也可以感知到Android组件的生命周期。 核心设计模式观察者模式。 Lifecycle使用示例先构建需要监听生命周期的组件 1234567891011public class LifeCycleComponent implements L

2019-02-15
源码解析

Jetpack-LiveData简析

LiveData简介本质上是一个观察者模式,在Activity/Fragment中实现观察者,LiveData是被观察者,在LiveData存储的数据变更时触发事件。 LiveData还具有生命周期感知能力,可以控制在应用可见时去更新UI,不可见时不执行操作,减少了内存泄露问题。 LiveData示例一般情况下LiveData要配合着ViewModel一起使用,ViewModel负责触发数据更新,

2019-02-15
源码解析

Android - Drawable相关

Drawable简介 Drawable是一种 可以在Canvas上进行绘制的对象,即可绘制物。与View不同,Drawable没有事件和交互的方法。 在实际开发中,Drawable通常被用作View的背景,一般通过XML进行定义,也支持通过代码去实现(例如动画样式的Drawable)。 Drawable是一个抽象类,是所有Drawable的基类。例如常用的ShapeDrawable、Bitmap

2019-01-10
Android

View的事件体系

在Android中任何一个与用户交互或者展示内容的控件都是由View拓展实现的。 View的基础知识View是Android中所有控件的基类,也包括ViewGroup。ViewGroup可以理解为View的组合,内部可以包含很多View以及ViewGroup,通过这种关系就形成了一个View树。 上层的控件主要负责测量与绘制下层的控件,并传递交互事件。 1. View的位置参数1.An

2018-12-25
Android

Java-BockingQueue阻塞队列

Queue接口Queue队列的特征是FIFO——先进先出。只有队尾可以进行插入操作,只有队头可以进行删除操作。 Java中的Queue继承了Collection接口,并额外实现了以下方法 12345678public interface Queue<E> extends Collection<E> { boolean add(E e); boolean

2018-12-24
Java

Android性能优化

针对Android中的性能优化,主要有以下几个有效的优化方法: 布局优化、绘制优化、内存泄漏优化、响应速度优化、ListView/RecyclerView及Bitmap优化、线程优化、其他 布局优化 核心思想就是:减少布局文件的层级。 删除布局中无用的控件和层次,其次有选择的使用性能比较低的ViewGroup。可以使用RelativeLayout来减少嵌套,从而达到减少层级的目

2018-12-20
Android

Java-ReentrantLock原理及解析

一般的锁都是配合synchronized使用的,实际上在java.util.concurrent.locks还提供了其他几个锁的实现,拥有更加强大的功能和更好的性能。 锁的分类可重入锁 可重入锁:任意线程在获取该锁后能够再次获取锁时不会被阻塞。 当前线程恶可以反复加锁,但必须释放同样多次数的锁,否则会导致锁不会释放。可以避免死锁 原理通过组合自定义同步器(AQS)实现锁的获取与释放 再次进行l

2018-12-19
Java

ThreadLocal原理分析

ThreadLocal详解 在前几节Handler详解中介绍 如何获取Looper对象时提及了是利用ThreadLocal来进行Looper的存储与获取。 1.初步理解ThreadLocalThreadLocal,线程本地存储区(Thread Local Storage,简称为TLS) ThreadLocal的定义为:用于提供线程变量,在多线程环境中可以保证各个线程的变量独立于其他线程里的变量

2018-12-09
源码分析

Handler机制源码解析(二)

主要包括Handler其他使用知识点 1. 子线程创建Handler对象 不可以直接在子线程创建Handler对象,因为Handler对象必须要绑定一个Looper,才可以使用。 若在子线程需要使用Handler,则需要先创建一个Looper对象即执行Looper.prepare()然后再创建Handler对象时调用Looper.myLooper()获取Looper对象传入方法,最后调用Loop

2018-10-07
源码解析

Handler机制源码解析

主要的内容包括Handler的机制以及四个组成部分和源码的分析 下面的代码分析都是基于Android8.0 - Oreo的源代码

2018-05-14
Android 源码解析
1…789101112

搜索

Hexo Fluid