摘要:一、FFmpeg 学习材料 1. 官方API文档 FFmpeg Documentation:http://www.ffmpeg.org/doxygen/trunk/index.html 2. 优秀开源项目 a). FFmpeg_Tutorial : https://github.com/yinwen 阅读全文
posted @ 2019-02-21 17:02 灰色飘零 阅读(1489) 评论(0) 推荐(3) 编辑
摘要:Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的。只能通过一点点的学习和积累把这块的知识串联积累起来。 初级入门篇: Android 音视频开发(一) : 通过三种方式绘制图片 Android 音视频开发(二):使用 AudioRecord 采集音频P 阅读全文
posted @ 2017-08-30 13:02 灰色飘零 阅读(26380) 评论(4) 推荐(8) 编辑
摘要:下面这些资源对Android开发来说是很有帮助的! 1. 在线编程书籍/教程集合 Android 官方网站 说明:Android 官方网站,Android 程序员必备,里面的内容100%靠谱,且有很多新东西和使用Guide,对英语的阅读能力要求有点高,需要上外网! 地址:http://develop 阅读全文
posted @ 2017-03-17 17:42 灰色飘零 阅读(964) 评论(0) 推荐(4) 编辑
摘要:在介绍完正则表达式的元字符、重复、分组的概念后,基本上我们对正则表达式的基本使用就OK了,本文我们讲一下正则表达式的高阶使用方式。 本节我们讲一下几种正则表达式的高级使用方式: 1. 正则表达式的后向引用 。 2. 零宽断言的概念及使用场景。 3. 负向零宽断言的概念及使用场景。 4. 冗长的平衡组 阅读全文
posted @ 2020-09-27 14:59 灰色飘零 阅读(14) 评论(0) 推荐(0) 编辑
摘要:一、正则表达式分组的概念 正则表达式的分组能够将子表达式做成子集,使用()进行分组,方便对match的字符串进行划分。 二、正则表达式分组的命名方式 分组的命名方式为:(?<groupname> exp) 另外还有一种方式,我们可以匹配exp,但是不捕获匹配的文本,也不分配组号,可以通过:(?:ex 阅读全文
posted @ 2020-09-27 13:58 灰色飘零 阅读(9) 评论(0) 推荐(0) 编辑
摘要:一、正则表达式中重复的概念 我们在之前知道了正则表达式元字符的概念,再结合上重复的概念,才能写出来一些相对高阶的正则表达式。因为在实际的正则表达式的使用过程中,我们肯定不是那么简单的只用元字符来进行一些简单的匹配,一般情况下还需要配合上重复的概念才能从一个很长很乱的字符串中匹配出我们想要的东西。 下 阅读全文
posted @ 2020-09-27 13:39 灰色飘零 阅读(11) 评论(0) 推荐(0) 编辑
摘要:一、正则表达式元字符 元字符是正则表达式最核心和基本的概念,我们必须要记住的是下面这几个元字符,下表是相关元字符的写法和说明: 后面我们在测试元字符的时候,会使用在上文提到的 RegexBuddy 工具,感兴趣的也可以自行下载使用。 RegexBuddy 工具的下载链接:https://pan.ba 阅读全文
posted @ 2020-09-27 09:45 灰色飘零 阅读(24) 评论(0) 推荐(0) 编辑
摘要:一、正则表达式的概念 正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。 二、正则表达式的使用场景 1. 批量提取 / 替换有规律的字符串. 2. 在各种高级的文本编辑器中的使用. 3. 在各类办公软件(如Office等)中使用. 4. 各种开发语言中的使用(C# / Java 阅读全文
posted @ 2020-09-25 23:06 灰色飘零 阅读(14) 评论(0) 推荐(0) 编辑
摘要:一、CMake 介绍 CMake是一个跨平台的安装/编译工具,通过CMake我们可以通过简单的语句来描述所有平台的安装/编译过程。它能输出各种makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。Cmake 并不直接建构出最终的软件,而是产生标准的 阅读全文
posted @ 2020-09-05 16:02 灰色飘零 阅读(66) 评论(0) 推荐(0) 编辑
摘要:一、什么是大小端模式 大端模式(Big-Endian):指的是数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中. 小端模式(Little-Endian):指的是数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。 上述的描述准确的说明了大小端模式的数据排列方式,但是还不 阅读全文
posted @ 2020-09-02 14:17 灰色飘零 阅读(71) 评论(0) 推荐(0) 编辑
摘要:在之前的《多媒体文件格式》系列中,我们对主流的多媒体的文件格式进行了整理和讲述。这里开始我们开始对如何分析和解释多媒体文件来进行整理,以便于以后我们自己排查一些问题的时候有一些帮助。本篇我们就讲一下WAV文件格式。 首先我们知道WAV格式的实质就是在 PCM 文件的前面加了一个文件头。下面是使用二进 阅读全文
posted @ 2020-09-01 20:45 灰色飘零 阅读(48) 评论(0) 推荐(0) 编辑
摘要:目前谷歌应用市场已经强制我们提交的App必须包含64位的native库,并且使用目前Android Studio 4.0开发的时候,也会看到在Build项目的时候,提示如下的内容: build.gradle: This app only has 32-bit [armeabi-v7a,x86] na 阅读全文
posted @ 2020-08-25 14:26 灰色飘零 阅读(178) 评论(0) 推荐(0) 编辑
摘要:在进行Android NDK开发的时候, 因为代码编写导致崩溃的问题时有发生,但是问题在于,Native层的崩溃日志,如果只看LogCat输出的内容,我们会发现,根本无法进行分析和处理,因为日志内容中都是一大堆的内存地址信息。 原始错误日志: 2020-08-20 18:04:01.149 2712 阅读全文
posted @ 2020-08-21 14:25 灰色飘零 阅读(104) 评论(0) 推荐(0) 编辑
摘要:一、DataBinding开启配置修改 升级到AS 4.0以后,出现如下的预警: DSL element 'android.dataBinding.enabled' is obsolete and has been replaced with 'android.buildFeatures.dataB 阅读全文
posted @ 2020-08-09 17:46 灰色飘零 阅读(319) 评论(0) 推荐(0) 编辑
摘要:本文涉及的工具收集整理到Github上了:https://gitee.com/renhui112115/Thinking-Android-Safe 一、Android 逆向工具 1. ApkTool Android逆向分析领域历史最久远的工具之一,提供了Android Apk反编译和回编译的功能,让 阅读全文
posted @ 2020-07-22 11:59 灰色飘零 阅读(131) 评论(0) 推荐(0) 编辑
摘要:在到Androidx之前我们使用support提供的Fragment的懒加载机制,基本上使用的是在setUserVisible + onHiddenChanged 这两个函数。但是在Androidx下setUserVisible已经被Google官方弃用了,推荐我们使用Fragment.setMax 阅读全文
posted @ 2020-07-13 18:10 灰色飘零 阅读(523) 评论(0) 推荐(1) 编辑
摘要:一、DeepLink 技术介绍 DeepLink,即为深度链接技术,主要应用场景是通过Web页面直接调用Android原生app,并且把需要的参数通过Uri的形式,直接传递给app,节省用户的注册成本。 DeepLink 通常运用于App社交分享、App广告引流、App裂变活动、Web to App 阅读全文
posted @ 2020-06-27 10:19 灰色飘零 阅读(435) 评论(0) 推荐(1) 编辑
摘要:一、什么是屏幕刷新机制 屏幕的刷新包括三个步骤: CPU 计算屏幕数据 GPU 进一步处理和缓存 Display 将缓存中(buffer)的屏幕数据显示出来。 屏幕刷新机制包含以下几点要素,需要我们了解和掌握: View 发起刷新的操作时,最终是走到了 ViewRootImpl 的 schedule 阅读全文
posted @ 2020-06-07 09:30 灰色飘零 阅读(220) 评论(0) 推荐(0) 编辑
摘要:一、Service的启动方式 Service的启动方式主要是:startService、bindService。 binderService和startService的区别: binderService不会触发应用端的onStartCommand函数。 二、startService的流程 流程分为两 阅读全文
posted @ 2020-05-26 11:40 灰色飘零 阅读(106) 评论(0) 推荐(0) 编辑
摘要:顾名思义,UI线程就是刷新UI所在的线程。 我们知道UI是单线程刷新的,那么UI线程是哪个线程?换一个问法:UI线程==主线程吗? 这里我们提出两个方法:Activity.runOnUiThread(Runnable)、View.post(Runnable)。 我们先看一下runOnUiThread 阅读全文
posted @ 2020-05-25 22:32 灰色飘零 阅读(79) 评论(0) 推荐(0) 编辑
摘要:一、Activity启动步骤 Activity的启动流程为:创建Activity对象 ==> 准备好Application ==> 创建ContextImpl ==> attach应用上下文 ==> 生命周期onCreate回调。 Activity的mWinodw对象就是在attach方法执行的时候 阅读全文
posted @ 2020-05-25 21:56 灰色飘零 阅读(119) 评论(0) 推荐(0) 编辑
摘要:一、Looper检测卡顿 熟悉Handler机制的话,我们会知道Looper是给线程提供处理消息能力的类,在Android Framework启动的时候,就会创建一个Main Looper即主线程对应的Looper,Looper中会维护一个MessageQueue,负责接收Handler发送过来的消 阅读全文
posted @ 2020-05-22 13:32 灰色飘零 阅读(287) 评论(0) 推荐(1) 编辑
摘要:一、Handler机制与ThreadLocal 在Handler机制的时候,我们会接触到Looper中的一个很重要的类:ThreadLocal,ThreadLocal并不是线程,它的作用是可以在每个线程中存储数据。 Handler在创建的时候就会获取当前线程的Looper来构造消息循环系统,获取的方 阅读全文
posted @ 2020-05-21 17:53 灰色飘零 阅读(165) 评论(0) 推荐(0) 编辑