自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(121)
  • 收藏
  • 关注

原创 两个线程输出12121212

public class PrintNumber extends Thread{ private int mNumber ; private volatile boolean switchThread = true; private Object lock; public PrintNumber(int number,Object lock){ mNumber = number; this.lock = lock; } @Ov

2020-12-21 10:11:51 406

原创 LeakCanary简单分析

在使用LeakCanary的时候要引入:debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.4'debugImplementation :debugImplementation 只在debug模式的编译和最终的debug apk打包时有效LeakCanary的初始化是利用ContentProvider进行初始化的, <provider android:name="le..

2020-12-13 11:31:25 554

原创 HashMap 1.8源码

源码是以1.8的进行分析的:这是JDK1.8HashMap的数据结构数组,链表(如果key的Hash相同),红黑树(当table的length>=64,在链表上相同key的数量>=7就开始使用红黑树)Map<String,String> map = new HashMap();map.put("hello","world");map.get("hello");//这是默认的构造方法,就是设置了一个默认的构建因子DEFAULT_LOAD_FACTOR =

2020-11-23 15:08:54 242 1

原创 实现ImageView的双指缩放

在支持双指的缩放的时候,首先要了解一下Android支持缩放的工具类ScaleGestureDetector,这个缩放是根据这个工具类来实现的。ScaleGestureDetector是用于处理缩放的工具类,用法与GestureDetector类似,都是通过onTouchEvent()关联相应的MotionEvent事件。OnScaleGestureListener回调方法的介绍:public interface OnScaleGestureListener { /**

2020-07-12 12:07:02 1763 2

原创 自定义可以点击缩放的ImageView

在开发时会遇到双击放大,放大后可以拖动的ImageView,就跟腾讯朋友圈一样的效果。下面我们就手撸一个这样的自定义控件。先介绍下要用到的知识点:双击的点击事件的获取,放大缩小的动画,在滑动Filing的惯性滑动处理。双击的点击事件,我们交给GestureDetectorCompat去处理。先介绍下OnGestureListener// 步骤1:创建手势检测器实例 & 传入OnGestureListener接口(需要复写对应方法)// 构造函数有3个,常用的是第二个// 1. Ge

2020-07-11 23:07:52 312

原创 Android中gradle的配置

Android中gradle的配置gradle文件的创建在config.gradle中创建变量在项目中使用config.gradle中的变量首先在根目录的build.gradle中引入config.gradle文件在自己项目或者Library中使用config.gradle中的变量gradle中各种配置的含义gradle文件的创建在项目上新建一个File文件输入config.gradle在config.gradle中创建变量ext{ username = "houde" //定义

2020-05-16 13:12:33 289

原创 Retrofit的一次请求源码分析

Retrofit是如何完成一次Http请求的:public interface ApiService { @FormUrlEncoded @POST(Api.COMMON_LOGIN) Call<BaseBean<TokenResult>> refreshToken(@HeaderMap Map<String, String> head...

2019-12-14 14:13:18 149

原创 TabLayout的使用及使用中的问题总结

改变Tab字体颜色设置默认字体颜色:app:tabTextColor="#ffffff"设置字体被选中后的颜色app:tabSelectedTextColor="#e40707"设置指示器颜色app:tabIndicatorColor="#30e407"设置指示器高度(如果希望选项卡不显示指示器效果只需要把指示器高度设置为0就行了) app:tabIndic...

2019-12-14 11:13:02 571

原创 Android 开发高手课Chapter01课后练习

1.clone chapter01 https://github.com/AndroidAdvanceWithGeektime/Chapter012.打包运行这个项目(如果项目无法运行可能是项目没有配置NDK,先配置NDK)3.点击里面的crash按钮让项目crash,4.在手机的根目录下找到crashDump文件找到里面的dmp文件,复制到电脑5.使用项目tools下的的mini...

2019-10-17 16:46:52 264

原创 Flutter中常用的列表组件

如果想去掉widget默认的padding,需要用MediaQuery.removePadding包裹MediaQuery.removePadding(context: context, removeTop: true, child:widget)基于ExpansionTile实现可展开的列表,相等于Android中的ExpandableListViewclass Sear...

2019-08-31 21:45:31 697

原创 Flutter中的Widget

在Flutter中给Widget中添加padding,可以使用Padding或者ContainerPadding( padding: EdgeInsets.fromLTRB(7, 4, 7, 4), child: LocalNavWidget(localNav:localNav),),为控件添加点击事件需要使用GestureDetector或者Inkwell实现其中的onTap事件...

2019-08-31 21:38:49 236

原创 OkHttp中的Socket连接

Java网络连接超底层分析看完这篇博客,感觉网络请求框架自己都可以撸一个。OSI网络模型 TCP/IP模型物理层数据链路层 网络连接层网络层 网际层传输层 传输层会话层 表示层应用层 应用层这个源码分析,感觉不会超过网络上大神的分享,但是还是要写份自己的。先说说这个OKHttp请求的需要...

2019-08-30 17:24:47 9024

原创 并发编程之Balking design pattern

一个线程要去执行某个操作。但是,在发现这个操作已经被别的线程做了,于是,就没有必要再去做这样的一个操作了。面对这种问题的设计方案是多线程设计模式中的Balking模式。Balking是“退缩不前”的意思。Balking Pattern和Guarded Suspension Pattern 一样需要警戒条件。在Balking Pattern中,当警戒条件不成立时,会马上中断,而Guarded Su...

2019-07-20 14:06:59 220

原创 并发编程之worker-thread design pattern

基本内容是:有一个流水线(channel),流水线一端有客户线程client,另一端有工人线程worker,客户不断把新的任务(request)放入流水线,工人在另一头获得任务,并执行,客户和工人的数量可多可少,就这么简单这个所谓的pattern初看好像似曾相识,就是一个thread pool嘛, 按通常的做法,request可以实现Runnable接口,把要做的事情放在run方法中,由work...

2019-07-20 14:05:31 267

原创 并发编程之Two-Phase Termination design pattern (二阶段终结线程)

程序分为两部分,一部分是功能操作,一部分为结束操作(释放资源)。Two-phase Termination直译的话是“两相终止”,不过就这个模式而言,该译作“两阶段终止”比较适当,想像您有一个执行程序正在周期性的运作,在“运作阶段”您送出了停止执行程序的请求,这时候执行程序不该慌张的马上终止目前的工作,而是先完成这一次周期的工作,然后进入“善后阶段”完成一些善后的工作,例如关闭档案或网路串流,所...

2019-07-20 14:03:58 383

原创 并发编程之Thread-pre-message design pattern

Thread-Per-Message的意思是为每一个消息的处理开辟一个线程使得消息能够以并发的方式进行处理,从而提高系统整体的吞吐能力。例如:电话接线员一样,收到的每一个电话投诉或者业务处理请求,都会提交对应的工单,然后交由对应的工作人员来处理。一个请求过来,就会有一个线程为当前请求服务模式特点1.提高响应性,缩短延迟时间当handle方法操作非常耗时的时候可以使用该模式。如果handle...

2019-07-20 14:02:35 230

原创 并发编程之CountDownLatch

CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。其实用Thread的join方法也是可以等到线程执行完之后,再去执行后面的代码。CountDownLatch实现线程等待,直到子线程执行完毕,主线程才往下执行。public class CountDownTest { public static void main(Strin...

2019-07-20 14:01:07 233

原创 并发编程之生产者消费者设计模式

在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。为什么要使用生产者和消费者模式在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消...

2019-07-20 13:56:10 384

原创 并发编程之ThreadLocal

线程安全保险箱 ThreadLocal(现在ThreadLocal用的Map保存数据(ThreadLocalMap),在以前版本用的是一个数组去保存,一个保存key,后一个保存value,现在改变了存储方式)它是线程的局部变量,这些变量只能在这个线程内被读写,在其他线程内是无法访问的。 ThreadLocal 定义的通常是与线程关联的私有静态字段ThreadLocal使用以当前线程作为Key...

2019-07-20 13:52:12 109

原创 并发编程之Guarded Suspension模式

1、Guarded Suspension意为暂停保护,其核心思想是仅当服务进程准备好时,才提供服务。设想一种场景,服务器可能会在很短时间内承受大量的客户端请求,客户端请求的数量可能超过服务器本身的即时处理能力,而服务端程序又不能丢弃任何一个客户请求。此时,最佳的处理方案莫过于让客户端要求进行排队,由服务端程序一个接一个处理。这样,既保证了所有的客户端请求均不丢失,同时也避免了服务器由于同时处理太多...

2019-07-20 13:50:21 383

原创 并发编程之Future设计模式 (未来设计模式)

通过子线程完成任务,调用之后直接返回,主线程继续下面的任务,等到子线程完成任务进行回调通知。Future 用来代表未来的一个凭据FutureTask 执行的任务逻辑FutureService 桥接 Future和FutureTask用于理解的实例:早上10点去蛋糕店定做一个蛋糕,交完钱蛋糕店提供一个收据,凭借收据进行蛋糕的领取,做蛋糕需要时间,店员让你下午3点去拿蛋糕。串行:一...

2019-07-20 13:48:53 632

原创 并发编程之读写锁设计模式(ReadWriteLock design pattern or Reader-Writer design pattern)

在进行读写操作的时候,读是可以并发的,但是写是不可以的,只能串行 READER WRITER READER YES NO WRITER NO NO 这种方式是把读操作放开,提高线程执行速度,把写操作添加同步代码块,保证顺序性原子性。public class ReadWriteLock { private int readi...

2019-07-20 13:45:37 436

原创 多线程设计模式之单线程执行设计模式(有一个门,始终只能一个人通过)

在我们的业务开发中,在多线程的情况下始终会有资源的公用,就是共享资源的使用,这个时候我们怎么保证线程的安全性呢?我们模拟一个场景:多个游客要验证身份通过一道门三个类:1.User 是使用资源的地方,也就是每一个用户,或者说是通过门的游客2.Gate:相当于一个资源 调用一个方法pass 方法3.SingleClient 当User跑起来的时候不断的使用这个资源public class ...

2019-07-20 13:38:15 315

原创 ClassLoader简介

一、概念JVM退出的方式:System.exit(0);程序正常结束crash程序运行过程中出现error或者exception操作系统的问题1.2类加载的三个阶段:(1) 装载:简单的说,类加载阶段就是由类加载器负责根据一个类的全限定名来读取此类的二进制字节流到JVM内部,并存储在运行时内存区的方法区,然后将其转换为一个与目标类型对应的java.lang.Clas...

2019-07-20 13:20:57 160

原创 Java单例的七种实现

1.饿汉式/** * 饿汉式 */public class SingleObject1 { private static final SingleObject1 instance = new SingleObject1(); private SingleObject1(){} //不能进行懒加载,直接创建对象,会占用内存 public static Sin...

2019-06-17 11:05:30 110

原创 线程初学

一、概念1.进程:进程是指处于运行过程中的程序,并且具有一定的独立功能。进程是系统进行资源分配和调度的一个单位。当程序进入内存运行时,即为进程。进程的三个特点:1:独立性:进程是系统中独立存在的实体,它可以独立拥有资源,每一个进程都有自己独立的地址空间,没有进程本身的运行,用户进程不可以直接访问其他进程的地址空间。2:动态性:进程和程序的区别在于进程是动态的,进程中有时间的概念,进程具有...

2019-06-01 13:14:21 151

原创 ffmpeg 音视频同步实现

先来张图镇楼:上面图片中的网址:https://www.cnblogs.com/leisure_chn/p/10584910.html在用图片展示下线程模型:在开始之前有个初始化的操作:定义为initPlayer主要是把这个把传过来的的surface转换为window,在这个地方需要注意的是:在调用这个方法时,要在view显示后调用,不然这个surface会是个NULLJava_c...

2019-05-21 11:22:25 2240

转载 FFmpeg音视频同步基础知识

1. I帧/P帧/B帧I帧:I帧(Intra-coded picture, 帧内编码帧,常称为关键帧)包含一幅完整的图像信息,属于帧内编码图像,不含运动矢量,在解码时不需要参考其他帧图像。因此在I帧图像处可以切换频道,而不会导致图像丢失或无法解码。I帧图像用于阻止误差的累积和扩散。在闭合式GOP中,每个GOP的第一个帧一定是I帧,且当前GOP的数据不会参考前后GOP的数据。P帧:P帧(Pr...

2019-05-19 12:30:40 3511

原创 Android使用FFmpeg播放音频

先来张图镇楼:使用Android的AudioTrack播放音频数据:下面是C代码:Java_com_houde_ffmpeg_test_MusicPlayer_playAudio(JNIEnv * env, jobject instance,jstring audioPath){ const char* path = env->GetStringUTFChars(audioP...

2019-05-18 11:01:13 1745

原创 实现android ffmpeg播放视频

前面两篇文章已经可以生成so,并且可以在Android studio中通过配置可以运行,并且可以打印出ffmpeg的配置信息。准备:在进行播放视频时需要一个吧yuv图像数据转换成argb的图像数据,这里还需要一个libyuv.so 的一个so库。可以通过这篇文章生成这个so :https://blog.csdn.net/quan648997767/article/details/7088028...

2019-05-12 16:02:43 4062

原创 android studio 配置ffmpeg

1)把编译生成的so库复制到libs文件夹下,同时把include里面的头文件也复制到libs文件夹下。2)在build.gradle中添加一下代码defaultConfig { applicationId "com.houde.ffmpeg.test" minSdkVersion 21 targetSdkVersion 28 ...

2019-05-10 11:29:54 1004

转载 Mac编译FFmpeg

原文地址:https://www.jianshu.com/p/feab970fd74c配置编译环境编译环境 Macstep1:下载FFmpeg库和NDK库(1)我在usr目录下建立了一个ndk文件夹(2)然后进入ndk文件夹,FFmpeg官网找到下载地址,再在命令行输入 “wget https://www.ffmpeg.org/releases/ffmpeg-4.0.2.tar.g...

2019-05-09 16:42:33 2816

原创 关于Flutter的大杂烩

1.Flutter 中界面绘制完成时的监听是通过WidgetBinding.instance.addPostFrameCallback((callback){//这里面写监听界面的代码})2.flutter强制container撑满整个屏幕width:double.infinity,3.在setState时会报错:This error might indicate...

2019-04-30 16:29:30 883

原创 android NDK 不生成SO库采坑

如果在创建完CMakeLists.txt后,C++文件已经准备就绪,但是你发现无论怎么build或者是run这个项目,当你在类中System.loadLibrary("xxxx-lib");时,就是一直报错,java.lang.UnsatisfiedLinkError :dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app...

2019-04-18 17:21:05 2093

原创 ijkplayer编译支持HTTPS和采坑记录

编译之前要准备好编译环境:sdkndk(这个地方希望是用你ndk14)再次不在赘述,只是贴出我的环境变量:#android adbexport PATH=${PATH}:/softdata/android-sdk-macosx/platform-tools:/softdata/android-sdk-macosx/toolsexport PATH=/softdata/android-s...

2019-04-09 11:19:14 1277

转载 Android面向切面编程(AOP)

转自:https://www.jianshu.com/p/aa1112dbebc7一、简述1、AOP的概念如果你用java做过后台开发,那么你一定知道AOP这个概念。如果不知道也无妨,套用百度百科的介绍,也能让你明白这玩意是干什么的:AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AO...

2019-04-01 20:05:18 250

转载 编译SDL1.2

SDL1.2和SDL2.0sdl是什么?这里就不解释了,之前的文中也说过。今天主要说说最近sdl给我填的堵。这个说来话也长,由于工作需要,最近在用OpenCV,记得几年前用就用过OpenCV,或者说写过一些OpenCV的代码吧。OpenCV里面有使用OpenCL加速。早期由于OpenCV使用OpenCL主要是在PC端,所以在local size啊之类的东西都是按照pc来设置,而要把OpenC...

2019-03-06 16:08:46 780

原创 ffmpeg C代码实现 视频添加文字

#include &amp;lt;stdlib.h&amp;gt;#include &amp;lt;stdio.h&amp;gt;//封装格式#include &quot;libavformat/avformat.h&quot;//解码#include &quot;libavcodec/avcodec.h&quot;//缩放#include &quot;libswscale/swscale.h&quot;#inc

2019-03-06 10:03:18 2932

原创 ffmpeg C代码实现 PCM音频编码

应用到的API及解释avcodec_register_all:注册FFmpeg所有编解码器。 avformat_alloc_output_context2():初始化输出码流的AVFormatContext。 avio_open():打开输出文件。 av_new_stream():创建输出码流的AVStream。 avcodec_find_encoder():查找编码器。 a...

2019-03-04 15:45:30 1929 1

原创 ffmpeg C代码实现 YUV数据编码

#include &amp;amp;lt;stdlib.h&amp;amp;gt;#include &amp;amp;lt;stdio.h&amp;amp;gt;#include &amp;quot;libavformat/avformat.h&amp;quot;#include &amp;quot;libavcodec/avcodec.h&amp;quot;#include &amp;quot;libavutil/log.h&

2019-03-01 14:22:16 560

空空如也

空空如也

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

TA关注的人

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