自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(118)
  • 资源 (6)
  • 收藏
  • 关注

原创 Android touchEvent 事件在Window中的流程UML 序列图

一 原文在:http://blog.csdn.net/a992036795/article/details/516903031. Activity 启动注册事件回调2. 事件回调注册3. 事件分发过程

2017-03-13 18:31:47 707

原创 Perfetto 中的 Android VSYNC信号

VSYNC信号用来同步 显示流水线。显示流水线由VSYNC 同步 应用唤醒并开始渲染的时间、SurfaceFlinger唤醒合成图层的时间以及屏幕刷新周期。这种同步可以消除卡顿,并提升UI的流畅性。SurfaceFlinger 可以通过调用来控制 HWC 是否生成 VSYNC 事件。SurfaceFlinger 调用生成 VSYNC 事件,VSYNC 事件与屏幕的刷新周期同步。当 SurfaceFlinger 同步到屏幕刷新周期时,SurfaceFlinger 会停用。

2024-03-11 11:49:22 793

原创 Compose Shape Slider

composed 可用于实现有状态修饰符,该修饰符为每个被修改的元素具有特定于实例的状态,允许相同的修饰符实例安全地重用于多个元素,同时维护特定于元素的状态。Compose 中默认提供的Slider 是Materail3 风格的,要想实现 Android View中的自定义风格 需要实现自己的Track 和Thumb Compose 函数。drawLine 函数的绘制Line时 支持三种Cap , 因此 Compose 的默认实现是无法通过Shape 自定义实现我们想要的效果。

2023-11-14 17:00:42 189

原创 Flutter android emebed 初始化过程

flutter 在android 上的启动过程

2023-05-20 17:08:38 149

原创 ExoPlayer-四CacheService

ExoPlayer-四CacheService

2023-01-30 10:27:27 276

原创 ExoPlayer-三AudioRender

ExoPlayer-三AudioRender

2023-01-30 10:26:33 223

原创 ExoPlayer- 二 准备Prepare

ExoPlayer- 二 准备Prepare

2023-01-30 10:25:06 239

原创 ExoPlayer-一 播放框架

ExoPlayer 的播放框架

2023-01-30 10:23:36 355

原创 ExoPlayer 中的音频时间戳计算

视频播放 音频视频对齐 有三种方式以音频为基准最为常见, ExoPlayer中也是采用以音频为基准的方式。DefaultAudioSink 负责音频数据的渲染,音频数据的时间戳也是在处理的。DefaultAudioSink 时间戳处理涉及这几个 概念。AudioTrackPositionTrackerMediaPositionParametersConfigurationAudioTrackPositionTracker用于 DefaultAudioSink 内部计算时间戳,是真正计算时间戳的类。根据and

2022-06-29 10:17:49 1129 2

原创 ExoPlayer的缓存 四 缓存Cache 的应用

ExoPlayer的缓存-- 四 Cache 的使用同一文件 内容服务器 生成的链接有时效性,如果用URL做缓存ID,会出现同一首无法命中缓存的情况。Exoplayer 的缓存默认使用 URL每首歌曲有一个SongID, 如果使用SongID, 每首歌曲的有伴奏 原唱 视频三种文件,也有冲突的可能。因此使用URL 的path 作为SongID 是比较合适的。Exoplayer 在创建CacheDataSourceFactory 的时候 传入CacheKeyFactory缓存的时候 生成Downloa

2022-06-15 14:17:57 2331 2

原创 ExoPlayer的缓存 三 SimpleCache的使用

ExoPlayer的缓存 – 三 Cache的使用和 exoplayer 的其他 DataSource 一样,CacheDataSource 的生成也是通过 Factory 模式生成,CacheDataSource 构造函数的参数和读写有关的有Cache cache 使用的缓存@Nullable DataSource upstreamDataSource 根据url 生成

2022-06-15 14:16:04 2268

原创 Exoplayer的缓存 二 下载服务DownloadService

Exoplayer的缓存 – 二 下载服务 DownloadServiceDownloadService 是一个android 标准的service, DownloadService 封装了下载的多个指令, 由一系列静态函数组成:DownloadService 在发送这些指令时,先把这些指令参数构建一个Intent, 然后通过startService 的方法发送Intent 到 Service.在Service 的 中 解析Intent, 并从Intent 中获取 下载的参数,传递到 Downl

2022-06-15 14:13:14 1345

翻译 Exoplayer的缓存 一 使用简介

Exoplayer 的 缓存-- 一 使用简介ExoPlayer 提供了媒体离线下载功能。在大多数用例中,即使应用程序在后台,也可以继续下载。应用实现这个工呢,应用程序应该继承子类 并实例化,并向DownloadService发送命令以添加、删除和控制下载。下图显示了涉及的主要类。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ty1byI9l-1655273162553)(https://exoplayer.dev/images/downloading.svg)]**图 1.

2022-06-15 14:10:15 2319

原创 WebView 使用简介

WebView 使用简介一 WebView 相关的类1. WebView用来显示网页,使用必须时刻注意我们需要添加网络权限<uses-permission android:name="android.permission.INTERNET"/>加载网页:webView.loadUrl("http://www.baidu.com/");加载本地网页, 网页放在 ass...

2020-03-26 12:11:13 222

原创 OkHttp Post 限速上传

在局域网中通过OkHttp post 上传一些大文件,测试后发现文件上传经常占满带宽,影响业务交互。在上传时需要限速。限速可以服务端限速,也可以客户端限速。服务端限速只是延迟接受,造成TCP 缓冲区拥堵,带宽的问题并没有真正的解决。客户端限速的思路就是写Socket 限速。搜了一下资料,OkHttp 并没有提供限速的接口。研究了一下OkHttp 的拦截器 Interceptor一 网络访问...

2020-03-26 12:03:07 1534

原创 C++ Rx 和Restfull 的使用

什么是响应式编程?用一个字来概括就是流(Stream)。Stream 就是一个按时间排序的 Events 序列,它可以放射三种不同的 Events:(某种类型的)Value、Error 或者一个” Completed” Signal。通过分别为 Value、Error、”Completed”定义事件处理函数,我们将会异步地捕获这些 Events。基于观察者模式,事件流将从上往下,从订阅源传递到观...

2019-12-20 21:16:50 1776

原创 DSBridge-Android 源码分析

一 Android WebView Js 原生APIAndroid WebView 提供了Js 和 WebView相互调用的接口,js 调用Android 代码通过@JavascriptInterface 注解WebView.addJavascriptInterface(Object object, String name) 方法实现JS 和java 对象的映射。同样 WebVi...

2019-09-29 16:03:15 1406

原创 深入理解AMS --- 二 Activity 的启动

深入理解AMS — 二 Activity 的启动以桌面启动应用为例分析一下启动一个新的应用的Activiy的过程。代码分支:android-9.0.0_r9combo: aosp_x86_64-eng启动Activity1.1 Activity#startActivity在launchu 进程中调用 Activity.startActivity 启动一个新的Activity.最...

2018-11-30 16:36:47 1820 2

原创 深入理解AMS --- 一 AMS 的启动

深入理解AMS --- 一 AMS 的启动深入理解AMS --- 一 AMS 的启动一 Zygote fork1.1 Zygote fork SystemServer 进程1.2 System_service 进程启动,准备加载的ClassLoader1.3 RuntimeInit 初始化,进一步的准备初始化的环境1.4 通过findStaticMain 方法反射调用System_Serve...

2018-11-20 15:33:04 4422

原创 Android 上 Https 双向通信— 深入理解KeyManager 和 TrustManagers

Android 客户端的配置生成SSLContext和Http 客户端关联Android 作为Https 的服务端AndroidService 支持客户端证书请求使用认证链做认证使用hugo 观察SSL handshark 过程服务端发送证书服务端发送 Certificate Request客户端校验客户端发送证书concrypt 库的bugTwo way s...

2018-04-27 18:56:20 13130 2

原创 Android 中签名 加密和HTTPS

RSA 加密算法非对称加密算法1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为”Diffie-Hellman密钥交换算法”。Diffie-Hellman算法一种秘钥交换算法,它是一种建立秘钥的方法,而不是加密方法,所以秘钥必须和其他一种加密算法结合使用。这种秘钥交换

2018-01-25 20:02:53 2519

原创 Android View — Gradient 渐变

Android View — Gradient 渐变Android 支持三种颜色渐变, LinearGradient(线性渐变) RadialGradient (径向渐变) SweepGradient(扫描渐变)。这三种渐变继承自android.graphics.Shader, Paint 类通过setShader支持渐变。

2017-08-06 23:26:07 1404

原创 Android View — Paint 详解

Android View — Paint 详解在Android View 的概念中,Paint 如名字所代表的含义,是画笔的意思。像我们平时画图一样,Paint就是相当于笔,而Canvas就是纸,这里叫画布。Paint 可以设置的多种属性。PaintCanvasView定义一个最简单的自定义View来展示Paint 的多种属性。重写onDraw 方法,在onDrasw 方法中调用子类的onChil

2017-07-09 18:37:01 659

原创 APP java.lang.UnsatisfiedLinkError so错误

so错误App 中需要引用第三方的SDK,第三方SDK 带so. 编译后在7.0的模拟器上运行产生如下的错误,但是在一个三星的平板上运行正常。05-19 10:30:56.977 25669-25669/com.nextev.carcontrol E/AndroidRuntime: FATAL EXCEPTION: main

2017-06-01 10:05:24 1756 2

原创 Android 自定义View(二) 下雨效果

一 实现思路,雨点用线段表示,通过控制线段的大小和宽度来表示不同的线段。一个雨点下雨的过程可以表示为一条直线,一次雨点在下雨的过程中坐标表示为 y=kx+b;通过不停的绘制调用onDraw 实现下雨的动画。二 RainView整个RainView 继承自View,然后把下雨的过程抽象为雨点,在RainView 中增加N个雨点,这样把整个下雨过程抽象到了RainDrop中,RainView 负

2017-05-17 22:37:49 1754

原创 Android 自定义View

Android 自定义View一 简单的自定义ViewAndroid View 的绘制流程主要有 onMeasure, onLayout, onDraw. UI 内容的绘制主要在onDraw 中完成。1.1 首先定义View类MyViewMyView 继承View, 实现两个构造方法。MyView(Context context, @Nullable AttributeSet attrs)是在XML

2017-05-17 21:45:49 1019

原创 websocket 和SSL浅析

1 WebSocket 原理1.1 背景WebSocket 是基于Http 协议的改进,Http 为无状态协议,基于短连接,需要频繁的发起请求,第二 Http 只能客户端发起请求,服务端无法主动请求。1.2 相同点都是基于TCP的应用层协议。 都使用Request/Response模型进行连接的建立。 在连接的建立过程中对错误的处理方式相同,在这个阶段WS可能返回和HTTP相同的返回码。 都可

2017-04-27 10:52:57 20670

原创 Android 蓝牙

MVP 结构的Android 蓝牙 DemoMVP整个代码采用MVP 结构来写。和其他MVP模式大同小异, 由于Bluetooth 发现配对连接过程比较 行,整个UI的布局功能不是特别的清晰。只能作为参考了。 比较难处理的是Adapter, 在这里把BtAdapter 拆分为三个部分,BtViewHolder 负责在Adapter 的getView 中处理View相关。Adapter中的数据放在

2017-04-20 14:42:27 2798

原创 Linux 内存管理

Linux 内存管理Linux 内存管理1页的概念2内核虚拟地址分区和物理内存分区3伙伴系统算法1 简介2 伙伴系统算法分配函数3 get_free_pages与alloc_pages的差异4Slab 内存分配算法1Slab 内存分配算法2Slab 内存结构3slab 着色区和slab 结构4Slab 内存函数5slabinfo对象5kmalloc 和 vmalloc1k

2017-03-29 10:05:54 685

转载 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2017-03-29 09:58:37 259

原创 ListView 侧滑菜单的实现 -- 大道至简的SwipeMenuLayout

SwipeMenuLayoutView for listView item一 介绍 ListView 通常用来展示多个个体,比如QQ 微信中的联系人列表。一个比较常见的功能是侧滑删除。这个功能属于比较常见的一个菜单,网络上也有很多实现。1 scroller 方式。最常见的一个实现是ListView 的Item View 为一个LinerLayout, 菜单在LinerLayout的最右端超出屏幕的

2017-02-22 20:41:16 3438

原创 Android OMX

Android OMX一 OMXClientAwesomePlayer 在创建OMXCodec 的时候调用了mClient.interface()。 mClient 类型为: OMXClient.OMXClient 负责OMX的客户端调用。status_t AwesomePlayer::initVideoDecoder(uint32_t flags) { mVideoSource = OMX

2016-12-14 19:21:16 1759

原创 Android Audio 的播放

Android Audio 的播放 前面已经分析了Video 的播放,现在看下Audio 的播放过程。Audio decode 后的数据是送给AudioFlinger处理, 由AudioFlinger 和硬件打交道。一 prepare 创建AudiO OMXCodecstatus_t AwesomePlayer:: prepare() 的prepare 函数会调用到prepareAsync_l

2016-12-14 19:20:48 1101

原创 AwesomePlayer 中 媒体流buffer 中的传递

AwesomePlayer 中 媒体流buffer 中的传递OMXCodec::read在前面分析Stagefright 的播放调用流程中play 会启动一个TimedEventQueue 的线程循环反复。先调用onVideoEvent 然后 postEventWithDelay(mVideoEvent, 0)到Queue中。 在onVideoEvent 中调用status_t err =

2016-12-14 19:20:16 1604

原创 Binder框架 -- 用户空间和驱动的交互

Binder框架 – 用户空间和驱动的交互MediaPlayerServic 启动的过程中,代码可以简化为:sp sm = new BpServiceManager(BpBinder(0));sm->addService(String16(“media.player”), new MediaPlayerService());针对上面的两步,看下用户态程序和内核驱动是怎么交互的。Parcel在用

2016-12-13 23:55:49 3311 3

原创 Binder框架 -- Binder 驱动

Binder框架 – Binder 驱动内核的文件结构task_struct Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息。struct file 和 struct files_struct 在*nuix 系统中,万物皆为文件,在内核中文件用一个struct file来描述,在用户空间用一个整形的文件描述符来表示,和内

2016-12-13 23:54:40 959

原创 Android 强弱指针分析

Android 强弱指针分析在C C++ 语言中,内存的管理历来是一个比较难的问题,在java 中内存new 的对象由jvm 虚拟机自动回收。在Android 上面提供了sp 和wp 两种类型的指针,管理new 出来的对象,能够自动的回收对象,专业于业务减轻在内存管理上的负担。实现对对象的管理通常的做法是使用引用计数,每增加一次引用引用计数增加一,当引用计数为0时,销毁这个对象。引用计数可以

2016-12-02 21:11:31 1892

原创 Android AsyncTask 原理及Java多线程探索

java 多线程Android AsyncTask

2016-11-13 17:11:52 699

原创 排序算法

排序算法排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列。根据排序过程中涉及的存储器不同,可以将排序算法分为内部排序,外部排序。在排序算法中,通常涉及两种操作,一比较关键字大小,二是移动。下面主要讨论下内部排序的几种常见算法。一 冒泡排序冒泡排序的过程是首先将第一个记录的关键字和第二个记录的关键字比较,如果两个关键字逆序L.r[1].key

2016-11-07 21:22:09 441

原创 android_动画框架

Android 动画框架动画API介绍View动画 (tween animation)帧间动画(frmae animation)属性动画 (Property Animation)View 动画原理以 AlphaAnimation 为例,AlphaAnimation new 以后,通常要调用View的startAnimationstartAnimation来执行动画: alphaImageView.s

2016-10-27 21:19:25 434

QT做的一个小游戏。catch

我自己做的一个小游戏,觉得很有意思。无聊时可以打发时间。也可以美化桌面

2010-05-29

飞鸽传书 ipmsg (linux C)

这个项目时我在原来的基础上修订而成的。修订了以下bug:发送文件时,文件不正确。增加了炫彩功能,运行程序大=看看就明白了。呵呵 生活是多彩的,程序也不能单调啊。支持以下一些功能:1.聊天。2文件传输。文件传输支持到单文件,多文件的代码也写了,不过没有测试。大家如果有兴趣,可以试一试。

2010-05-15

学生信息管理系统(C)

这是用C编写的学生信息管理系统,可以实现输入删除,排序等操作。文件的保存,读写等。

2010-05-11

局域网飞鸽(C 编写兼容linux和windows平台)

这是一款自己编写的兼容linux和windows平台的飞鸽传输协议,运行在字符界面。用来学习linux网络编程。实现了飞鸽功能的模块化。

2010-05-11

飞鸽 局域网QQ(C)

这是用C编写的在linux平台下的飞鸽,可以实现聊天和传送文件。仅供参考,希望对大家的学习有帮助。

2010-05-11

C语言编写的windows平台 LRC歌词解析

LRC 歌词解析 实现滚屏输出 同时调用千千静听 播放歌曲

2010-03-29

空空如也

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

TA关注的人

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