
Android中级
文章平均质量分 81
Alex_ChuTT
这个作者很懒,什么都没留下…
展开
-
Glide源码解析
目前得物的图片库主要是基于的自研图片加载库,但是源码的精妙之处我们也有很多值得学习的地方。今天跟一下源码,和小伙伴们分享下我的理解。什么导包啥的我们就不赘述了,直接干,拿到ImageView去展示服务端图片。大概步骤如下下面我们追踪一下这3个函数:跟到一个有代表性的重载方法里面看:空白通过感知后通知给到所有实现了该接口的类又是一堆重载,但是可以看到很明显有我们常用的跟下来只是在类里面就结束了。意犹未尽,其实下面的才是重点终于看到网络接口的请求了,这里用的是,累惨了!绕了原创 2022-07-11 10:33:34 · 2064 阅读 · 1 评论 -
自定义AndroidLint在得物社区的实践分享
现在正常的商业APP,大部分都会禁止在代码里直接用系统的Log直接打日志,原因大家都懂就不细说了。所以自定义一个Lint检测很有必要,如下图:诸如此类的还有、、、等等一些列常规方法和类检测。随便举两个例子,来说明现实场景中可能存在的问题:这类问题在测试环境很难测出,review阶段也可能没注意到,直到灰度甚至全量在线上出现crash才被发现。而Lint就是这么一种可以较低侵入、损失提前的解决方案。当然除此之外,作为TL或者更高层面的角色,是希望大家能按照某种规则,把相关代码都写在统一要求的位置,那其原创 2022-06-08 23:29:40 · 1161 阅读 · 0 评论 -
Android基于Fmod实现变音
fmod介绍古人有云:视频界有ffmpeg,音频界有fmod。下面的游戏大家伙可以看看,有没有眼熟的:我随便截了几张图,有兴趣的可以到Fmod官网去具体了解。怎么样有没有兴趣搞个小游戏玩玩,音频引擎已经有了。我这边在调音编辑器里玩了一会,但是调音水平有限,不过多介绍了,有兴趣的自己down下来玩儿。废话不多说,准备干活第一步 先下载Android平台的引擎第二步 下载后需要的文件:新建项目并部署C/C++库步骤第一步 新建Native Project然后一路next原创 2021-12-15 15:25:10 · 4089 阅读 · 2 评论 -
Scrcpy无线控制android手机
背景你是否存在一种情况,正在疯狂搬砖,或者debug正酣的时候,突然想起有个会议或者分享要参加,于是不得不把拓展坞,连接线、手机和电脑一起带着去开会。如果有,那么今天分享的文章可以很好的解决这个问题,至少可以做到扔掉拓展坞和数据线(记得告诉我仍在哪里了,我去捡!!!)具体操作PS以下操作都基于mac,被操作手机无需root。第一步 Homebrew 安装(如果已安装了,则略过此步骤,直接进入第二步)/usr/bin/ruby -e "$(curl -fsSL https://raw.githu原创 2021-11-16 18:44:10 · 4293 阅读 · 0 评论 -
Dialog事件穿透解析
背景activity上弹出全屏dialog,需要在dialog透明度为0的地方进行事件传递,即下方的activity响应事件。毫无疑问,事件分发。但是之前我们都是在同一个view树上进行递归分发,那么dialog和activity也是这样吗?事件分发于是,按照常规思路,dialog是依附在activity上展示的,那么只需要对dialog中rootview的onTouchEvent事件进行不拦截,返回false,最后会调用activity的onTouchEvent方法,代码如下: @Overri原创 2021-11-03 13:34:40 · 387 阅读 · 0 评论 -
浅谈设备唯一 ID
一、前言设备ID,简单来说就是一串符号(或者数字),映射现实中一台设备。如果这些符号和现实中的设备是一一对应的,可称之为“唯一设备ID(Unique Device Identifier)”。然而,对于Android平台而言,没有稳定的API可以让开发者获取到这样的设备ID。开发者通常会遇到这样的困境:随着项目的演进, 越来越多的地方需要用到设备ID然而随着Android版本的升级,获取设备ID却越来越难了。加上Android平台碎片化的问题,获取设备ID之路,可以说是步履维艰。二原创 2021-11-01 17:45:37 · 598 阅读 · 0 评论 -
CameraX和OpenGL的融合(cameraX预览数据openGL渲染)
上一篇实现了rc版本的CameraX的一些基本能力但是那只是基本,因为很多时候我们想要在拿到预览的YUV之前,就做一些事情,那只能通过拿到SurfaceTexture交给OpenGL去渲染,这篇文章就是主要说这个的,相关文章或者视频再网上挺少的,所以花费了比较多时间,后面细说。前置知识OpenGL(Open Graphics Library)是开放图形库。是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口API。简单来说就是一套画图的API。OpenGL ES (OpenGL fo原创 2021-04-27 20:53:06 · 2953 阅读 · 2 评论 -
最新版CameraX入门(拍照、存储展示、切换前后摄像头、手电筒、闪光灯、手势伸缩、双击放大缩小)
基于官网demo,增加了对焦、手势缩放、手电、闪光灯等操作Camera的预备知识熟悉的大佬可以跳过Surface、SurfaceView、SurfaceHolder这三个是啥Surface是什么?一句话来说Surface 是一块用于填充图像数据的内存空间。可以再深入一点,了解下它包含的东西:SurfaceView是什么?一句话来描述的话那就是:它一个可以显示surface的view!在App端它仍在View hierachy中,但在WMS中(可以理解为Server端),它与宿主窗口是分.原创 2021-04-22 19:38:09 · 12328 阅读 · 10 评论 -
Jetpack之LiveData你所需要的一切
基本概念LiveData是一种具有生命周期感知能力的可观察数据持有类LiveData可以保证屏幕上的显示内容和数据一直保持同步特点LiveData了解UI界面的状态,如果activity不在屏幕上显示,livedata不会触发没必要的界面更新,如果activity已经被销毁,会自动清空与observer的连接-LiveData是一个LifecycleOwner,他可以直接感知activity或fragment的生命周期可解决什么问题感知生命周期,在active的时候接收变化可以感知原创 2021-02-15 19:35:57 · 274 阅读 · 0 评论 -
Jetpack之LifeCycle你所需要知道的一切
背景从今天开始整理一些之前学过的jetpack的组件基本概念Livecycle 是一个表示android生命周期及状态的对象LivecycleOwner(可以理解为被观察者) 用于连接有生命周期的对象,如activity,fragmentLivecycleObserver(可以理解为观察者) 用于观察LifecycleOwner可以解决什么问题可以有效的避免内存泄漏和解决android生命周期的常见难题。Glide里面就是通过LifeCycle而免除了很多这样的代码:“on原创 2021-02-15 15:12:18 · 586 阅读 · 0 评论 -
《组件化架构》知识汇总
组件:指单一的功能组件,如视频组件(VideoSDK)、支付组件(PaySDK)、路由组件(Router),每个组件都能单独抽出来制作成SDK,也有的公司内部叫Lib组件模块:指的是独立的业务模块,如直播模块(LiveModule)、首页模块(HomeModule)、即时通信模块(IMModule)等。模块相对于组件来说粒度更大,模块可能包含多种不同的组件。有的公司内部也叫UI组件组件化的好处: 避免重复造轮子,节省开发和维护成本 通过组件和模块为业务基准合理安排人力,提高开发...原创 2020-11-24 22:38:46 · 688 阅读 · 0 评论 -
Okhttp相关知识点总结
OkHttp介绍Google在Android4.4以后开始将源码中的HttpURLConnection底层实现替换为OKHttp,同时现在流行的Retrofit框架底层同样是使用OKHttp的。优点支持Http1、Http2、Quic以及WebSocket连接池复用底层TCP(Socket),减少请求延时缓存响应数据减少重复的网络请求请求失败自动重试主机的其他ip,自动重定向使用流程在使用OkHttp发起一次请求时,对于使用者最少存在 OkHttpClient 、 Request原创 2020-12-22 23:08:20 · 512 阅读 · 2 评论 -
新接手项目,查看依赖关系
gradlew app:dependencies >> dependency.txt竟然报错了:bash: ./gradlew: Permission denied那我加权限:chmod +x gradlew完事儿我再次调用还是报错:bash: ./gradlew: /usr/bin/env: bad interpreter: Operation not permitted继续:ls -l发现:由于项目在经过云盘或者什么传输后加入了拓展属性@,注意gradlew文件也是被加原创 2020-12-06 00:30:05 · 284 阅读 · 0 评论 -
java中synchrogined和Lock的知识点整理
原创 2020-10-27 17:45:18 · 142 阅读 · 0 评论 -
bsdiff在mac上的安装和使用
简单明了brew install bsdiff最好开VPN,会快一点!使用在Android种的增量更新、Tinker原理的前置知识都有关键作用原创 2020-10-21 11:42:37 · 1277 阅读 · 0 评论 -
AIDL之双向通信
上一篇《Android进程通信一之AIDL》说到进程A---->B拿去数据,那问题来了,B进程如果有了数据更新,如何回调给A啊?这篇文章就来聊聊这个原理声明一个 AIDL 接口,然后在服务端所实现的 AIDL 接口中通过注册和注销来添加和删除声明的 AIDL 接口。然后在服务端需要发消息给客户端的时候遍历所有已注册的接口来发起通信,这就是为什么说AIDL可以一对多通信。第一步声明AIDL文件,并新增接口方法// IMyAidlInterface.aidlpackage com.ly.原创 2020-08-05 15:15:12 · 1663 阅读 · 1 评论 -
Android进程通信一之AIDL
AIDL概念Android提供的一种快速实现binder进程通信的工具,也可以不用AIDL,自己实现binder来达到同样的效果,但是会比较复杂,后面我会写文章来细说。AIDL支持的基本类型 : String,int,long,boolean,float,double,ArrayList,HashMap,Parcelable为什么要用AIDL因为可以让我们更轻松的使用binder,专注写client、service,而不必太关心ServiceManager、Binder驱动,那么问题又来了,原创 2020-08-04 19:37:33 · 609 阅读 · 1 评论 -
JVM初识(一)运行时数据区一览
Android不管是5.0之前的DVM还是现在的ART,不管是java 开发的还是Kotlin开发的,其本质上都是运行在虚拟机中的,那么我们有必要了解JVM的内存模型是什么样子的,哪些地方可能会产生OOM或者stackoverflo。内存模型对应的:现代的jvm在线程私有的空间里,虚拟机栈和本地方法栈是共用的一块内存空间。程序计数器PC1.程序计数器是线程私有的区域,每个线程当然得有个计数器记录当前执行到那个指令。2占用的内存空间小,可以把它看成是当前线程所执行的字节码的行号指示器。如果线程原创 2020-07-22 17:44:13 · 194 阅读 · 0 评论 -
Windows下Android NDK安装配置
随着Android开发时间越来越久,迟早会发现 有很多地方C/C++远比用Java开发更有效率。如果你在开发Android app 需要调用C/C++代码,那么请继续看下去a)下载NDK并解压:请点击我下载 包括win系统、mac、linux各个发行版b)下载并安装Cygwin请点击我下载需要注意以下3原创 2013-12-22 21:18:24 · 3439 阅读 · 1 评论