- 博客(133)
- 资源 (7)
- 收藏
- 关注
原创 Android开发学习Framework之路-目录
Android系统Framework相关知识学习了很长时间,一直处于学了忘,忘了学的状态,主要原因还是没有学透,没有完全理解,而且学到的原理也暂时没用上,毕竟目前工作做的是APP开发。毕竟好记性不如烂笔头,决定还是以博客的形式来记录学习到的知识,也能更好的梳理相关逻辑。由于Android系统Framework的知识非常多,会有很多篇博客,这篇博客主要作为目录的作用,方便查看阅读。
2024-07-20 21:11:39
253
原创 SystemServer分析记录
Zygote进程forkSystemServer进程后,调用了SystemServer的main方法,具体流程请参考其他资料,这里记录的是SystemServer关键代码的分析。
2023-06-25 10:50:51
241
原创 epoll使用实例
Android的Looper机制中,MessageQueue阻塞的方式是通过Linux的epoll机制,IO多路复用机制,这里不说原理,说一下epoll使用机制,还是参数的解析。
2022-08-17 15:38:23
490
原创 FFmpeg 命令集合
因为经常会使用FFmpeg命令对视频做处理,所以在这里记录一下常用的命令ffmpeg -i a.mov -strict -2 -vf crop=1080:1080:0:420 out.mp4其中的 crop=1080:1080:0:420 才裁剪参数,具体含义是 crop=width:height❌y,其中 width 和 height 表示裁剪后的尺寸,x:y 表示裁剪区域的左上角坐标。...
2022-02-11 17:24:28
1150
原创 Docker基本使用
安装docker1.检查卸载以前的版本sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docke
2021-10-26 16:01:53
1260
原创 Spring AMQP 笔记
这篇博客是博主学习的笔记,可能说的不是很清楚,也可能会有错误,多担待AMQP协议AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议概念Publisher:发布者Consumer:消费者Message:消息Queue:消息队列Exchange:交换机,把发送的消息按照规则发送到符合规则的消息队列中,起消息路由作用fanout类型:将消息发送到绑定的所有队列中direct类型:将消息发送到routeKey.
2021-10-26 15:44:10
508
原创 Feign
依赖管理统一依赖版本号<!--SpringBoot版本号--><parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.2</version> <relativePath/> <!-- lookup par
2021-10-12 10:24:40
413
原创 Nacos
Nacos常用的二大功能:服务注册和发现配置中心(可热更新)Nacos安装下载地址:https://github.com/alibaba/nacos/releases/tag/2.0.3下载解压就可以使用Nacos使用1.单机启动单机启动一般用于学习和测试,命令窗口cd到安装目录/nacos/bin,使用命令startup.cmd -m standalone,浏览器访问地址:http://127.0.0.1:8848/nacos/index.html,账号和密码都是nacos。2.集群
2021-10-11 17:47:19
1269
原创 Glide源码解读之绑定生命周期
今天有空,稍微解读了一下glide加载图片框架源码,glide源码比较多,除了弄清楚主流程,对我编程有帮助的,我都会记录下来。我这里不会一步一步详细解读源码,因为其他博客一大堆,我这里主要讲解一下原理;绑定生命周期,不用我们自己在onStart,onStop去调用,这种思想很好,所以,值得借鉴。主要实现原理是创建一个无UI的Fragment添加(绑定)到当前的Activity(或其他Fragment),通过重写Fragment的onStart和onStop方法,通知RequestManager任务改变
2020-12-03 15:42:14
254
1
原创 PS 一键生成Android各个尺寸的图标
之前的项目都是用一套尺寸的图标做适配,优点就是减少APP的大小,还不用做多套适配图标,缺点就是每次加载图标都要做缩放,影响APP的性能。公司最近终于招到UI了,发现他的PS工具可以一键生成Android和iOS各种尺寸图标。最近新建一个项目,打算尝试自己生成Android各种尺寸图标。工具PS脚本这个PS脚本是我参照别人写的,直接共享出来:// 获取当前的文档var pngDoc = activeDocument;// 弹出对话框,提示输入文件名var destName = prom.
2020-06-29 11:29:46
1919
原创 Android FFmpeg音频重采样
自己有个需求,要把采样率为44100的PCM重采样为16000的PCM,经过1天的探索,终于成功了!!网上的资料比较少,找到的都是比较零碎的知识点,只能慢慢摸索,想到这个,还是觉得有团队好,个人学习总是慢一点的,比较曲折,不过也能锻炼个人的学习能力!基本原理进入正题,所谓音频重采样,简单来说,就是在原来的PCM进行插值(低采样率到高采样率)或抽取(高采样率到低采样),但是如果我们只是线性插值...
2019-07-24 11:40:25
2052
2
原创 JNI 同一个Module生成多个so
终于解决困扰了我2天的问题!!!那叫一个激动!!最近做一个项目,需要在同一个模块中同时生成两个SO文件,刚开始没觉得怎么样,就在一个CMakeLists.txt文件这么写入:cmake_minimum_required(VERSION 3.4.1)# 这是第一个soadd_library( a-lib SHARED a.cpp)# 这是第二个soadd_lib...
2019-06-28 16:47:26
1153
原创 Android 自定义可手势移动、放缩ImageView
又很长的一段时间没写博客,趁着空闲之余,做一下一个常用的自定义View的记录。手势移动、放缩ImageView是一个很常用的控件,之前都是用别人写好的,发现对Matrix类不是很熟悉,估计以后可能会经常用到这个类,所以想深入了解一下Matrix原理和怎么使用!Matrix网上太多资料了,比如 Android Matrix矩阵,大家自行查资料,只有理解了Matrix变换矩阵,才能看懂下面的代码...
2019-06-22 16:53:28
666
原创 Android JNI操作Bitmap实现黑白图片
最近想练习一下NDK,基于我接下来的目标是多媒体,多以想多点学习一下关于滤镜的知识,黑白滤镜是最简单的了。这里实现的是将一张彩色图片转成黑白图片,是黑白滤镜的基础!直接上码:// java 代码public void gray(View view) { Bitmap source = BitmapFactory.decodeResource(getResources(), R.dr...
2018-12-05 11:46:57
1638
原创 Android FFmpeg系列——7 实现快进/快退功能
实现快进、快退功能,其实就是设置视频的播放进度!基本思路如下:暂停 生产(读取帧)和 消费(解码播放);清空队列,包括视频队列和音频队列;调用 av_seek_frame 设置进度;唤醒,继续 生产(读取帧)和 消费(解码播放);思路很简单,我们一步一步实现!暂停 生产(读取帧)和 消费(解码播放)这里,我结合线程锁和条件变量来实现,暂时生产和消费:/** * 生产函数 ...
2018-10-31 16:35:24
2293
原创 Android FFmpeg系列——6 Java 获取播放进度
一般播放器都能显示播放进度,这一节来实现这个功能。由于我是在 C 层播放视频的,至于播放到哪里,Java 层是不知道的,所以得利用 C 调用 Java 代码来实现。Java 代码/** * 同步播放音视频 * @param path * @param surface * @param callback */public native void play(String path, S...
2018-10-31 14:26:08
1324
1
原创 Android FFmpeg系列——4 子线程播放音视频
利用工作闲余时间,终于实现在子线程播放音视频!上一接学习了在 C 使用多线程,接着就是利用 C 多线程同时播放音视频(暂时还不同步)。不多说,直接上码。代码// C 层播放器结构体typedef struct _Player { // Env JavaVM *java_vm; // Java 实例 jobject instance; jobject...
2018-10-26 16:48:42
1804
1
原创 Android FFmpeg系列——5 音视频同步播放
音视频同步播放是做播放器的难点之一,在博主用到的播放器中,有一款播放器我真的无法忍受,那就是百度云播放器!这里我真的得吐槽一下,卡顿之后,然后视频可以正常播放,但是没有声音,声音竟然没了!!你这么一个大厂,连这点都搞不定?!而且我还提过2次建议(因为实在忍不了,但是又必须得用),也不是出现的概率很低,真搞不明白!!好啦,吐槽完了,回归正题,我们来学习怎么实现音视频用不播放!首先,我们得先了解几个...
2018-10-19 10:15:45
1958
1
原创 Android FFmpeg系列——3 C多线程使用
在 Android FFmpeg系列——2 播放音频 中,在主线程播放音频会导致ANR,虽然我们可以在 Java 层启动一个线程来播放,由于接下来我们要实现完整播放视频,需要在 C 层达到控制效果,所以我们还是在 C 层启动新线程来播放音频。这一节,我们来学习 C 层多线程的使用。pthreadpthread 是 C 语言实现多线程的库,我们要了解这个库的3个相关函数。pthread_c...
2018-10-18 17:39:25
1561
原创 Android FFmpeg系列——2 播放音频
音频简介虽然听了很多音频,但其实对音频知之甚少,所以很有必要了解一下音频。Audio,指人耳可以听到的声音频率在20Hz~20kHz之间的声波,称为音频。音频录制播放音频之前,我们得先了解音频是怎么保存的。保存音频,其实也就是录音和制作。模拟时代模拟时代是把原始信号以物理方式录制到磁带上(当然在录音棚里完成了),然后加工、剪接、修改,最后录制到磁带、LP等广大听众可以欣赏的载体上。这一...
2018-10-17 11:34:12
1339
原创 Android FFmpeg系列——1 播放视频
由于公司项目原因,现在才得空来学习关于FFmpeg库的使用。前言在使用FFmpeg库的过程中,哎呦,各种心酸!!项目重新创建了N次,调试了N次,终于把视频流播放出来,心里甚是激动呀!环境搭建Android Studio 创建Demo项目,记得把 “Include c++ support” 勾上。这里主要说2点:项目目录结构;文件配置,主要是app模块build.gradle 和 C...
2018-10-16 17:54:42
6689
7
原创 Android FFmpeg 编译.so库
编译了好几天,算是把它搞出来了!!环境准备 博主尝试在win7使用Cygwin编译,按照网上的说法,结果出现各种莫名其妙的错,比如 “找不到\r命令” 之类,大家可以尝试一下,反正我是怕了,所以博主决定在linux下编译。编译环境:Linux(博主是在VMware搭建的Centos环境)这里再做一下笔记,关于在VMware中window和linux文件共享的。(1)安...
2018-08-10 16:36:28
2789
原创 Android Xfermode
最近需要做类似于QQ裁剪头像的功能:以前的我,肯定会糊里糊涂的copy网上的资料完事!!这样完全学不到东西,所以这次认真点,学习里面的“精髓”,虽然不难!好了,这里会接触到Canvas的Xfermode与Layer的东西,在自定义View中可以实现很复杂的效果。Xfermode先稍微了解一下关于Xfermode,Xfermode称为图像混合模式,可以将不同的图像进行混合处理...
2018-04-12 10:43:08
695
原创 Android OpenCV库使用
最近在做一个文字识别的工具,主要是想从图片中提取出对我有用的信息。文字识别用的是Tesseract的文字识别库,写了一个demo,发现识别的速度很慢,于是想是不是要对原图做些处理呢?!于是乎,找到了这个博文:Android中的文字识别(论文精简版),里面提到需要对原图片做基本的处理:对于图片的处理,使用的OpenCV库。所以在此记录一下在Android中怎么使用OpenCV库。...
2018-04-11 16:51:40
2941
1
原创 Android 微信支付
公司最近需要接微信支付,由于微信支付相关文档不全,在集成过程中,遇到了很多坑,这里记录一下,希望能帮到需要帮助的人。好了,开始吧!!1.申请微信开发者账号微信开放平台网址:https://open.weixin.qq.com/开发者对申请开发者账号已经不能再熟悉了吧,而且这步没什么坑,跳过!!2.创建移动应用(1) (2) 注意图标的尺寸:小图标28*28...
2018-04-11 10:09:05
776
原创 Android6.0 权限管理
Android6.0之后,为了用户的安全,对于一些敏感的权限,不仅要在AndroidManifest文件声明这些权限,而且还要在代码中动态申请这些权限。敏感权限:CALENDAR(日历) READ_CALENDAR WRITE_CALENDARCAMERA(相机) CAMERACONTACTS(联系人) READ_CONTACTS WRITE_CONTAC...
2018-04-03 15:11:01
363
转载 Java方法变量中的final
今天由于对方法变量中的final有点困惑,在网上查了一下,才发现在方法变量中,final是这么一回事,这里做一下记录!什么时候方法参数才需要加final关键字?匿名/局部内部类访问外部方法参数时,外部参数需要加上final关键字。用代码来解析:public void start(int interval, final boolean beep) { /** *...
2018-03-27 10:13:56
1824
原创 自定义Android视频播放器 - 切换横竖屏
前一篇自定义了SurfaceView,然后尝试横屏显示,虽然视频适配方面没有问题,但是没有占满整个屏幕。我分析了一下一般的视频播放器,发现:竖屏播放视频,播放器的宽度占满手机屏幕的宽度,播放器的高度根据视频大小决定,有可能超过屏幕的高度。横屏播放视频,播放器的高度占满手机屏幕的宽度,播放器的宽度根据视频大小决定,有可能超过屏幕的高度。根据以上两点,对自定义SurfaceView测...
2018-03-22 13:49:44
4014
原创 自定义Android视频播放器 - 自定义SurfaceView
Android开发视频播放器,一般都是使用MediaPlayer+SurfaceView来实现,VideoView也是使用了MediaPlayer+SurfaceView方式(不信看源码)。所以,我打算使用MediaPlayer+SurfaceView封装自己的视频播放库。本章打算用之前的例子:视频播放器开发 - MediaPlayer在例子中,使用的是原生的SurfaceView,现将S...
2018-03-21 10:59:06
3756
1
原创 视频播放器开发 - VideoView
刚开始,还以为VideoView是Android提供我们另一种播放媒体的控件,看了源码之后,原来是MediaPlayer+SurfaceView的封装,只是方便我们使用而已,当然也有好处。既然是封装,那我们来看看VideoView是怎么使用MediaPlayer+SurfaceView的。源码分析源码虽不多,但是只分析有用的代码,直接上码:public class VideoView ...
2018-03-20 16:08:03
884
原创 视频播放器开发 - MediaPlayer
简介MediaPlayer是Android提供媒体文件的组件,播放视频时一般配合SurfaceView使用。状态机我们使用MediaPlayer前,先了解一下MediaPlayer的状态机,如图:播放流程我们从状态机图可以看出,使用MediaPlayer播放视频流程如下:初始化MediaPlayer,监听各种事件。常见的事件说明:OnPreparedLis...
2018-03-20 10:09:19
1050
原创 Java设计模式 - 开篇
简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。分类这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模...
2018-03-19 20:50:23
262
原创 视频播放器开发 - 基本原理
在做视频播放器之前,我们先了解一些基本定义。基本定义视频连续的图像变化每秒超过24帧画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面;看上去是平滑连续的视觉效果,这样连续的画面叫做视频。帧率指的是视频格式每秒钟播放的静态画面数量。典型的画面更新率由早期的每秒6或8张(frame per second,简称fps)至现今的每秒120张不等。编解码我们知道,其实...
2018-03-18 10:23:43
14597
原创 视频播放器开发 - SurfaceView
最近打算开发一个属于自己的视频播放器,上网查了很多资料,好像都有SurfaceView的身影。虽然之前自定义摄像机有用过它,但是也是看着别人怎么用,没怎么去详细了解它,觉得是时候注意它了(并没有打算从源码角度分析它)。View的更新先聊聊View的更新!想更新View,必须主动调用View的invalidate()或postInvalidate()方法,然后onDraw()方法才会执行...
2018-03-16 16:14:23
639
原创 Java设计原则 - 开闭原则
六大设计原则Java设计原则 - 单一职责原则Java设计原则 - 里氏替换原则Java设计原则 - 依赖倒置原则Java设计原则 - 接口隔离原则Java设计原则 - 迪米特法则Java设计原则 - 开闭原则定义 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭在所有设计原则的定义中,开闭原则的定义是最模糊的,只告诉设计软件时,应该对扩展开放,对修改关闭...
2018-03-16 09:32:52
781
原创 Java设计原则 - 迪米特法则
六大设计原则Java设计原则 - 单一职责原则Java设计原则 - 里氏替换原则Java设计原则 - 依赖倒置原则Java设计原则 - 接口隔离原则Java设计原则 - 迪米特法则Java设计原则 - 开闭原则定义 一个对象应该对其他对象保持最少的了解迪米特法则又叫最少知道原则,只与朋友说话,不要与陌生人说话。对类而言,哪些是朋友类呢?出现在成员变量、方法的输入...
2018-03-15 14:51:17
836
原创 Java设计原则 - 接口隔离原则
六大设计原则Java设计原则 - 单一职责原则Java设计原则 - 里氏替换原则Java设计原则 - 依赖倒置原则Java设计原则 - 接口隔离原则Java设计原则 - 迪米特法则Java设计原则 - 开闭原则定义 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 总的来说,我们应该要适度拆分接口,举个例子就明白为什么要拆分接口了。...
2018-03-15 11:07:13
760
原创 Java设计原则 - 依赖倒置原则
六大设计原则Java设计原则 - 单一职责原则Java设计原则 - 里氏替换原则Java设计原则 - 依赖倒置原则Java设计原则 - 接口隔离原则Java设计原则 - 迪米特法则Java设计原则 - 开闭原则定义 高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。高层模块主要负责复杂的业务逻辑,低层模块主要负责基本的原子操...
2018-03-14 22:08:47
970
1
原创 Java设计原则 - 里氏替换原则
六大设计原则Java设计原则 - 单一职责原则Java设计原则 - 里氏替换原则Java设计原则 - 依赖倒置原则Java设计原则 - 接口隔离原则Java设计原则 - 迪米特法则Java设计原则 - 开闭原则定义 如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行...
2018-03-14 17:46:41
1656
1
原创 Java设计原则 - 单一职责原则
这里想吐槽一下,可能由于最近优快云升级,导致我辛辛苦苦写了两天的记录丢失了(退出前确定按了保存的),真是够了!!!现在权当再复习一遍!好了,废话不多说,开始整理Java设计原则!六大设计原则Java设计原则 - 单一职责原则Java设计原则 - 里氏替换原则Java设计原则 - 依赖倒置原则Java设计原则 - 接口隔离原则Java设计原则 - 迪米特法则Java设计原则...
2018-03-14 15:51:55
1378
gradle-5.4.1-all.zip
2020-10-27
MacOS Unlocker For VMware15
2020-05-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人