自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (4)
  • 收藏
  • 关注

原创 音视频系列:Webrtc音视频通话

音视频通话难点:音视频编解码原理 IP4中,设备在各自的内网,需要p2p打洞 音频降噪和回声消除信令服务器:设备连接的socket服务器 传递各个设备之间的信息:传递各个节点的sdp信息,传递ice信息 包含业务功能:如加入、离开房间等打洞服务器:为什么打洞?IP4中,设备在各自的内网,各自的内网不能通信,而想要通信,就需要突破内网限制;如果用服务器中转,则会加大服务器开销和增加延时;若不用中转,就需要点对点(p2p)打洞,来实现通信;NAT网络地址转换 设..

2022-02-08 20:06:23 2323

原创 Jetpack之LiveData订阅与数据分发(一)

使用:public class LiveDataActivity extends AppCompatActivity { MutableLiveData liveData= new MutableLiveData<String>(); void liveDataTest(){ // 任何线程都可以发送数据 liveData.postValue("postValue"); // 只有主线程可以发送数据 ..

2022-02-10 15:14:08 1364 1

原创 Android 虚拟机、对象、变量的内存分配

什么是虚拟机?虚拟机就是将平台无关的.class文件的字节码翻译成平台相关的机器码,来实现跨平台;jvm:Java 文件->编译器>class字节码->JVM->机器码android:Java 文件->编译器>class字节码->dex工具->dex->aapt工具->apkjava的jvm虚拟机与Android的虚拟机有什么区别?java执行的是.class文件;Android虚拟机执行的是.dex文件; class文件存在

2022-02-09 15:13:19 328

原创 Android Glide

Glide关键类RequestManager: 具有生命周期,管理RequestTracker中的两个队列 RequestTracker:里面有两个队列,一个运行时队列和一个等待队列,当into()时放入请求;Glide生命周期来源在Gilde.with(this)时,先创建了一个无UI的framgmet; 再创建了一个RequestManager,将framgmet的生命周期Lifecycle传了进去 RequestManager就有了生命周期; 再将RequestManager设置

2022-02-05 22:36:24 1497

原创 Android ClassLoader机制与热修复

方法执行:调用对象.method() 从对象.method()获取方法的指令集地址 执行引擎根据指令集地址从class中拿到方法指令 将方法指令的栈帧放入栈中 进行执行栈帧得到结果阿里sophix原理:c++替换方法区的class中有异常的arm指令地址;优势:不需要重启app;劣势:兼容性差,需要各个版本对应的头文件art_mothod.h;一个java方法在ART虚拟机中对应一个ArtMethod结构体;ArtMethod中有一个指针void * entry_point

2022-02-04 18:03:00 321

原创 java 排序算法

冒泡排序对一个含有N个元素的数组,进行排序时,最少需要一次循环,最多需要经过N-1次循环;需要两个for循环和一个判断条件;第一轮结束,就可以在末尾得到最小或最大值;public void maoPao(){ int[] arr=new int[5,78,9,20,7,1,60]; for(int len = arr.length-1; i>0; i--){//每轮遍历次数比上一次要少1 for(int j=0;j&

2022-02-03 23:05:47 91

原创 java HashMap、ArrayList

数据结构java只提供了两种基础数据结构:单个变量 数组之后的各种的数据结构,都是对这两种基础数据结构类型的管理;ArrayList本质是一组连续的数组;new 的时候会先开辟一组空间,先占用着,不够用了再扩容;扩容时:先去找连续的空闲的合适大小的一组内存空间 老的数据先用深拷贝至新的长数组中 删除老的数组缺点:在中间指定位置插入数据时,后面所有元素都得往后移动,效率低;优点:查询快,直接用下标就可以找到元素;LinkedList本质是单个变量;不用..

2022-02-03 18:40:39 426

原创 Android IO、序列化、dex加密

IO原理:实际是调用系统内核的函数库,进行数据同步后,由内核将数据写入磁盘;页4K数据为一页,一页数据是IO操作的基本单位;在空间局部性原理下,为了优化,如果数据量较大的情况下,可能会出现预占位4~16K的情况;实际还没写数据,只是提前先多开辟空间,减少了多次开辟空间的操作;基础IOFileInputSteam inputSteam/FileOutSteam outSteam:并没有实现inputSteam.flush(), 实际每次调用inputSteam.write()都

2022-01-31 20:47:12 1316

原创 Java 虚拟机、栈区、堆区、GC

JVMjvm是一种规范,能将按照JVM规范生成的字节码转换为机器能执行的机器码;它能识别 .class后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作;程序执行:Java 文件->编译器>字节码->JVM->机器码;Android的java虚拟机就是按照JVM的规范,进行特殊定制的java虚拟机,里面的参数经过了调优以达到更适合特定设备使用;JVM三大角色类加载器 :将编译好的.class文件加载至运行时数..

2022-01-29 21:35:37 1252

原创 Android 注解、反射、Apt原理

注解、反射、代理模式:Java:注解和反射 - opendragonhuang - 博客园创建Retrofit使用 建造者模式Retrofit其实是将OkHttp进行了封装;解决了Okhttp请求完数据不能自动切回主线程的问题;在build时,创建了一个主线程Handler(Looper.getMainLooper()),并存了起来;在请求完数据后,使用handler.post()切回主线程;OkHttp请求时,使用责任链模式;同时支持最大5个不同域名的64个..

2022-01-29 14:49:51 1778

原创 Android RecycleView缓存

RecycleView有几级缓存?4级;RecycleView实现了3个,其中一个提供给程序员实现;第一级:ArrayList<ViewHolder> mAttchedScrap; 第二级:ArrayList<ViewHolder>mCachedViews; 第三级:ViewCacheExtension mViewCacheExtension;是个抽象类,没有被实现,提供给用户用的,让用户去实现的; 第四级:RecycleViewPool mRecyclePool...

2022-01-28 21:13:36 575

原创 Android UI测量、布局、绘制

Android WMS及绘制流程随记_暮冬一十四的博客-CSDN博客测量测量模式一个int占4个字节,一个字节8位,也就是一个int类型的二进制为32位:MeasureSpec.UNSPECIFIED:任意大小,基本上没用过;值为0x0<<30(16进制的0左移30位):000000000000 0000000000 0000000000; MeasureSpec.EXACTLY:精确测量,如固定大小或match_parent;值为0x1<<30(16...

2022-01-28 00:33:38 1308

原创 Android 事件分发机制

硬件设备事件信号采集传输到上层:Android Framework源码-IMS随记_暮冬一十四的博客-CSDN博客WMS中有个WindowState集合,WMS最终会将事件封装为MotionEvent对象通过调用->Activity.dispatchTouchEvent(MotionEvent ev)->PhoneWindow->ViewRootImpl->ViewGroup->View进行事件分发;事件分发角色:Activity、ViewGrou.

2022-01-26 21:37:30 797

原创 Android Framework源码-IMS

Linux事件机制:事件都是储存在文件中;如触摸屏幕事件:存储在etc/input/event0的文件中,每次触摸都会以16进制数据储存;INotify:监听文件状态,有变化则产生FD值epoll机制:epoll_create:注册监听事件类型epoll_ctl:监听FD值,FD改变则唤醒epoll_wait()epoll_wait:没事件则阻塞,有事件则分发;将INotify和epoll封装为一个对象EventHub;SystemServer进程启动时,创建了Inp

2022-01-26 14:30:31 801

原创 Android WMS及绘制流程

Android Handler_暮冬一十四的博客-CSDN博客Android Binder_暮冬一十四的博客-CSDN博客Android Zygote_暮冬一十四的博客-CSDN博客Android Framework源码-PMS_暮冬一十四的博客-CSDN博客Android Framework源码-AMS在activity.attach()时创建一个窗体对象PhoneWindow获取到wms服务的IBinder,再去创建了一个WMS的代理类WindowMana

2022-01-24 15:56:50 1710

原创 Android Framework源码-AMS

Android Handler随记_暮冬一十四的博客-CSDN博客Android Binder随记_暮冬一十四的博客-CSDN博客Android Zygote随记_暮冬一十四的博客-CSDN博客Android Framwork源码-PMS随记_暮冬一十四的博客-CSDN博客AMS(ActivityManagerService)在SystemServer的进程中,是SystemServer中的一个对象;作用:管理activity的生命周期 启动activity 与PMS进行

2022-01-23 16:49:45 632

原创 Android Zygote

init进程由pid为0的Linux内核进程启动 启动系统关键进程: 执行init.rc脚本,执行脚本中一行一行的Linux命令来启动进程 守护系统关键进程:如蓝牙、铃声、接打电话、安装应用等进程名结尾带“d”的系统进程 当守护的进程被杀死时,重启被杀死的进程 当守护的进程无法被重启时,重启手机:如ZygoteZygote由init进程执行zygote.rc脚本启动的 最开始启动的时候名字并不是叫Zygote,而是app_process 在app_main.cpp中当解析到命令中有

2022-01-23 14:29:54 1147

原创 Android Binder

为什么要用Binder?Android系统内核是Linux内核 Linux内核进程通信有:管道、内存共享、Socket、File; 对比:管道 效率低;两次拷贝; 数据从应用A拷贝到内核的管道中,管道再拷贝到应用B; 安全 1v1 内存共享 效率最高;无需拷贝,A、B、C...共享一块内存; 不安全 N v N Socket 效率最低;两次拷贝;用户和CPU内核状态切换; 安全 C/S模型 File 文

2022-01-21 23:23:54 1001

原创 Android Handler

为什么要有handler?主要目的是要解决线程切换问题,handler里的Message机制解决了线程间通信

2022-01-21 16:47:15 621

原创 Android Framework源码-PMS

1、PMS(PackageManagerService):作用:手机开机时启动PMS进程,会扫描所有系统app和用户安装的app中的AndroidMnifest.xml;所以开机很慢 使用工具类PackageParse解析AndroidMnifest 解析出对应App中的四大组件标签,放入各自的List中:activites、services、revicers、providers,这四个ArrayList是在package缓存中,每个APP对应一个package;2、AMS(ActivityM

2022-01-19 16:11:06 659

原创 音视频系列:x264和NDK在Centos7上交叉编译

目标:使用Centos 7编译出Android使用的FFmpeg的so库准备:不熟悉的可以看上一篇文章:Centos编译ffmpeg Android NDK: 本文示例用的是版本android-ndk-r20b,选择对应版本的下载就行。 注意:ndk18及以下用的是gcc编译的,ndk19及以上是用clang编译的,版本不一样编译脚本是不一样的。下载x264在根目录进入要下载到目录,我的是usr/ffmpeg/下载x264源码:(前提是已经安装git并存在环境变量)git c

2022-01-17 15:06:08 2093

原创 音视频系列:faac和NDK在Centos7上交叉编译

目标:使用Centos 7编译出Android使用的FFmpeg的so库准备:不熟悉的可以看上一篇文章:Centos编译ffmpeg Android NDK: 本文示例用的是版本android-ndk-r20b,选择对应版本的下载就行。 注意:ndk18及以下用的是gcc编译的,ndk19及以上是用clang编译的,版本不一样编译脚本是不一样的。下载faac在根目录进入要下载到目录,我的是usr/ffmpeg/cd usr/ffmpeg下载:wget --no-chec

2022-01-17 12:32:03 2919

原创 Android 锁、线程

1、线程生命周期:正常执行一次就结束的:new->runnable->runing->treminer(怎么拼忘了,结束);执行多次结束的:new->runnable->runing->调用wait()变成wating->调用notify()变成runnable->runing->treminer锁类型,保存在对象的对象头中:无锁 偏向锁 轻量锁 : 重量锁 :monitor介入,必定有一个线程会获得锁2、单例:这个懒汉式

2022-01-16 20:34:44 1588

原创 音视频系列:FFmpeg和NDK在Centos7上交叉编译

目标:使用Centos 7或Mac编译出Android使用的FFmpeg的so库准备:FFmpeg源码:本文示例用的是版本4.2.5 Android NDK: 本文示例用的是版本android-ndk-r20b,选择对应版本的下载就行。解压源码:如上图,命令行进入放ffmpeg下载的源码位置,我的路径为/usr/ffmpeg执行解压命令:tar -jxvf ffmpeg-4.2.5.tar.bz2ffmpeg解压后,解压ndk,执行命令:unzip andr...

2021-12-25 16:35:37 2748

原创 Android 多个请求时LoadingDialog反复显示消失问题的封装思考

场景在开发中一个页面会有多个请求,同时发送,返回时间有快有慢,loading在此时可能会在第一个返回接口时消失,然而其他接口还没返回数据。此时这种jie'k

2021-06-01 14:58:44 1920 5

原创 Flutter 主工程引入包,模块化

1、右键项目名,新建module2、选择module类型完成后,不管module路径在哪,都会自动添加都项目下3、主工程配置module(1)、查看module名字(2)、进入主工程配置文件4、测试(1)、在module_base中新建扩展函数(2)、在主工程中使用...

2021-04-15 10:42:50 934 1

原创 python3 Django 创建表命令、创建管理员

项目根目录,控制台分别输入并回车执行1、python3 manage.py makemigrations2、python3 manage.py migrate

2021-04-14 13:36:13 190

原创 Flutter Row使用

1、解决平分宽度,并各自从左开始布局 Row( mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.cente

2021-04-12 15:10:18 723

原创 Python+Django下载网络图片,保存到ImageField

网上搜的那种两行代码的,保存后,图片损坏无法打开。所以记录一下爬取网络小说的封面,并保存到数据库自己用的方法,可能比较笨:数据Model保存逻辑:

2020-09-27 09:52:26 556

原创 AndroidStudio升级到4.0之后,编译时出现Warning: Default Activity not found解决办法

###方法1:比较暴力,不推荐###方法2:点击androidmanifest中左下角mergend manifest 查看报错信息:###可以看到我的项目是label冲突,进行修改:###可以看到修改后,报错消失,APP可以运行了...

2020-07-28 15:21:25 341

原创 两个RecyclerView联动滑动,StackOverflowError

两个RecyclerView联动滑动,StackOverflowError遇到的坑:数据2000多条,双Recycleview联动滑动,左右各一个,滑动左边的右边也动,滑动右边左边也动;先滑动左边的Recycleview-rcvLeft,两个列表滑动过程中(重点),去滑动右边的Recycleview-rcvRight这时就会报错,堆内存溢出8M (StackOverflowError),同...

2020-03-18 10:16:28 756

原创 Python3+Django2的Authorization Token验证

转载请著名出处:https://blog.csdn.net/qq_32506429/article/details/89641123初学Python Web,环境是python3 +Django2,然后Web想做简单的用户token验证,验证通过才能进行其他操作;在网上找了好久,先学了装饰器,才看懂很多教程,但是没有直接上代码的,对伸手党的我很不友好(>.<羞耻...),所以研究了...

2019-04-28 16:56:22 2688

原创 Android 不规则图形点击区域判断

本文介绍一种利用 三角函数角度 及点击坐标与图片中心点坐标(或某一点)的连线长短 判断点击区域如要判断这张图片的点击区域:1.首先在初始化图片iv_bg后,测量iv_bg的坐标,得到图片的中心坐标:ViewTreeObserver vto2 = iv_bg.getViewTreeObserver();vto2.addOnGlobalLayoutListener(new OnGl...

2016-03-28 15:03:12 3814

libmp3lame.so、 include for Android armv7a、arm64

mp3编码器库 armv7a api-19 arm64 api-21

2022-09-30

libdav1d include for Android armv7a、arm64;

视频av1解码器库 armv7a api-19 arm64 api-21

2022-09-30

libaom so 、include for Android armv7a、arm64;

ffmpeg4.0及以上播放AV1格式视频用; 需要ffmpeg开启enable libaom和enable-decode=libaom-av1

2022-03-14

faac-android包含3个cpu的so和头文件.zip

使用ndk-r21e和faac编译的so和头文件

2022-01-17

x264-android包含3个cpu的so和头文件.zip

使用ndk-r21e和x264编译的so文件和头文件

2022-01-17

ffmpeg包含android三个cpu架构so.zip

使用ndk-r21e、ffmpeg-4.2.5编译的三个架构的so库和头文件,亲测可用; 相关的博客链接:https://blog.csdn.net/qq_32506429/article/details/122144239

2022-01-15

空空如也

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

TA关注的人

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