移动端
文章平均质量分 91
阿烦大大@
学而不思则罔,思而不学则殆
展开
-
深入剖析Glide源码-4.15版本(一)
Glide作为android中最主流的几个图片加载框架之一,是面试中问到的必不可少的一种框架。它看似简单的外表下,实则隐藏着一个庞然大物,今天我们就把块硬骨头啃上一啃~。glide在4.15版本生命周期管理与注册机管理进行了改进,我们从4.11版本开始看,流程读懂了再研究4.15版本是如何演化的。原创 2023-03-13 21:54:31 · 736 阅读 · 0 评论 -
Android组件化方案(二)-基于kotlinpoet实现的注解处理器(重磅干货)
前情回顾上一篇文章我们主要讲的gradle的统一管理,组件之间的通信方案,以及如何使用全局map进行页面跳转。每个页面都需要在application中进行注册,这样肯定是不行的,根据面向对象的思想, 我们先对其进行一层封装,做到在编译器自动进行注册。封装全局Map首先我们将通信方案作为一个组件,创建一个irouter_api的module,由base去依赖它,然后把RouteBean实体类挪进来,为了方便以后扩展,我们在RouteBean中增加几个属性class RouteBean { /原创 2020-12-07 11:02:55 · 2610 阅读 · 0 评论 -
Android组件化方案 (一)
什么是组件化组件化的工作方式信奉独立、完整、自由组合。目标就是尽可能把设计与开发中的元素独立化,使它具备完整的局部功能,通过自由组合来构成整个产品。将每个业务模块分成单独的组件,可单独打包、测试,这种方式能够让我们的项目具有更高的可维护性和可读性。为什么需要组件化我们在一些中大型的项目中可以看到,他们少则几个,多则几十个,甚至上百个组件,为什么这样做呢?在早起的项目中,都是单一的模块,进行业务分包的模式开发的,这样随着项目增大,项目失去层次感,维护起来越来越棘手。再一个就是耦合度太高,稍不注意就有不同原创 2020-11-27 16:47:50 · 556 阅读 · 1 评论 -
从零开始实现一个插件化框架(四)-补充篇
系列文章从零开始实现一个插件化框架(一)从零开始实现一个插件化框架(二)从零开始实现一个插件化框架(三)好久没写过文章啦,始终有一股深深的罪恶感。插件化系列的文章我前三篇已经介绍完了原理.从加载插件类---->加载四大组件并跳转 ----> 资源加载 ----> android10以下版本适配四个大步骤,我相信大家都已经有所了解。不过还是有不少小伙伴在问我android10如何适配,如果同学们看了第三篇文章,我相信适配android10也是易如反掌的,毕竟只是 api的变动嘛!原创 2020-10-21 17:01:20 · 536 阅读 · 1 评论 -
Google组件化方案 - AutoService
Google组件化方案 - AutoService市面上的组件化通信框架可谓是眼花缭乱,参差不齐。像阿里的ARouter, 美团的WMRouter, 还有个人开发者提供的CC框架,他们各有优缺点。今天我们介绍一款轻量级的组件化通信框架,谷歌的亲儿子 - AutoService。使用篇项目结构在Android项目架构中,最底层一个Base层,然后是Common,所有的业务模块都依赖Common层,app被称为壳工程,它依赖所有的业务模块。图很简陋,但整体就是这样一个结构了。我们就以一个简单的de原创 2020-08-25 17:14:04 · 10010 阅读 · 6 评论 -
剖析RecyclerView的回收与复用
同学们面试中有没有经常被问到RecyclerView的回收复用逻辑呢?是否又跟我一样一脸懵逼?今天我们就从源码的角度入手,扒开RecyclerView的“神秘面纱”,让面试官都见鬼去吧!回收复用何谓回收与复用呢?RecyclerView在滚动时,会将滑出屏幕外的View进行一个缓存,这就是ViewHolder的回收,从屏幕外面滑进来的ViewHolder呢,会从缓存中取ViewHolder,如果有缓存没有,那么就进行创建,如果找到了就进行复用。所以准确的应该说是ViewHolder的回收与复用。Vie原创 2020-08-08 20:29:10 · 1927 阅读 · 2 评论 -
深入理解Android自定义View(一)
Android自定义View - 一前言View绘制流程viewGroup.addView()requestLayout()onMeasureonLayoutonDraw流程图requestLayout()流程performLayout()invalidate()自定义View基础View介绍View分类View坐标系View坐标描述View触摸事件获取位置View的视图结构View构造函数View自定义属性测量(MeasureSpec)测量模式MeasureSpec介绍总结前言有多少小伙伴和我一样,一原创 2020-07-31 14:50:48 · 847 阅读 · 0 评论 -
CameraX 库打开手电筒的两种方式
CameraX 库打开手电筒好久没有写文章了,罪过,这几个月一直很忙,都没有时间进步了。。。最近新开发一个项目,正好拿google的jetpack组件练练手,于是就集成了CameraX。里面很多坑啊,都在度娘的帮助下解决了。不过还有一个问题,google和度娘都帮不了我了,在此记录一下:CameraX 库怎么打开手电筒?其实有两种方法这种方式很简单: 官方demo里面获取到了camera对象,注意是androidx.camera.core.Camera包下面的,可以利用这个对象来控制手电筒:原创 2020-06-18 16:44:05 · 3184 阅读 · 0 评论 -
Java并发 - 基础(一)
什么是线程在面试中,经常会问到:进程和线程的区别。在了解线程之前,首先要了解什么是进程。进程是操作系统进行资源分配和调度的基本单位,当运行一个程序时,就是开启了一个进程。线程是进程中的一个主体,一个进程至少有一个线程(也就是主线程),进程中的多个线程可以共享进程的资源。当执行一个程序时,CPU的资源会分配给线程,所以线程是CPU进行资源分配和调度的基本单位。CPU核心数和线程数最早前的电脑都是单核单线程的,也就是一个核心处理器对应一个线程去工作。后来慢慢出现了多核心技术和超线程技术。多核心技术已经原创 2020-05-13 16:16:45 · 238 阅读 · 0 评论 -
IOC依赖注入(一)— 手写ButterKnife框架
IOC控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,其中最常见的就是依赖注入(Dependency Injection, 简称DI)依赖注入现在市面上越来越多的开源框架使用了依赖注入技术。什么是依赖注入呢?其实就是使用注解的方式去实现某些功能。比如:1.运行时注入 xUtils,eventBus,springMVC2.源码时注入 ...原创 2020-02-24 14:04:44 · 627 阅读 · 0 评论 -
从零开始实现一个插件化框架(三) - 完结篇
系列文章从零开始实现一个插件化框架(一)从零开始实现一个插件化框架(二)往期回顾Activity的启动流程上两篇文章讲了插件apk中的类加载和Activity跳转,那么面试中经常问到的Activity的启动流程是不是就有了答案?Activity的启动过程,我们可以从Context的startActivity说起,其实现是ContextImpl的startActivity,然后内部会通过...原创 2020-01-21 17:01:29 · 1390 阅读 · 4 评论 -
从零开始实现一个插件化框架(二)
从零开始实现一个插件化框架(二)上一篇讲了插件化的概念和类加载机制,并实现了从插件apk中合并,并加载一个类。不知道大家还记不记得,实现插件化,只需解决三个问题即可:如何加载插件中的类?如何加载插件中的资源?当然还有最重要的一个问题,四大组件如何调用呢?四大组件是需要注册的,而插件apk中的组件显然不会在宿主提前注册,那么如何去调用它呢?第一个问题在上一篇文章中已经实现,今天我们就来...原创 2020-01-20 16:16:07 · 1649 阅读 · 0 评论 -
从零开始实现一个插件化框架(一)
从零开始实现一个插件化框架(一)什么是插件化概念插件化技术最初源于免安装运行 apk 的想法,这个免安装的 apk 就可以理解为插件,而支持插件的 app 我们一般叫宿主。宿主可以在运行时加载和运行插件,这样便可以将 app 中一些不常用的功能模块做成插件,一方面减小了安装包的大小,另一方面可以实现 app 功能的动态扩展。我们知道计算机主板就是由一系列的插槽组成的,我们需要什么功能...原创 2020-01-12 15:57:07 · 2393 阅读 · 1 评论 -
MMKV的原理与实现(三)
MMKV的原理与实现(三)MMKV多线程设计1. C/C++中的线程:POSIX线程POSIX,全称为可移植性操作系统接口。它包括了系统应用程序接口(简称API)。该标准的目的是定义了标准的基于UNIX操作系统的系统接口和环境来支持源代码级的可移植性,致力于提供基于不同语言的规范。POSIX的线程标准,定义了创建和操纵线程的一套API。2. 基本使用#include <iostre...原创 2020-01-07 17:49:09 · 2186 阅读 · 0 评论 -
MMKV的原理与实现(二)
MMKV的原理与实现(二)上一篇讲了MMKV的存储原理以及protobuf编码的规则,并以一个整数的编码规则举例。今天我们就从 MMKV的源码来剖析它具体是怎么实现的。页上次简单的提了一下页的概念,在Linux中,数据都是以分页的形式保存的,32位系统中,一页就是1024个字节,MMKV在初始化文件的时候,给文件分配了一页的大小,后面根据修改后的数据大小再进行动态扩容,每次翻一倍。负数编码...原创 2019-12-28 15:50:34 · 2400 阅读 · 0 评论 -
MMKV的原理与实现(一)
MMKV的原理与实现(一)说到轻量级的数据持久化,大家最先想到的就是SharedPreferences(以下简称SP)了,SP存储方式为xml,直接使用I/O流进行文件的读写,这就形成了一个弊端:每次写入或修改都需要替换掉原来的数据,并将所有数据 重新写入文件。可想而知,如果一个sp文件的内容过多,那么再写入的时候会造成卡顿,甚至会有 ANR的风险。一、I/O1、先看一下SP的工作原理虚...原创 2019-12-25 17:49:12 · 5473 阅读 · 1 评论 -
简单的封装通用的toolbar
本篇讲解如何简单的封装toolbar,用到了builder设计模式,使用起来也非常方便。看看是怎么封装的吧!首先创建一个toolbar布局文件:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...原创 2019-12-16 17:31:11 · 364 阅读 · 1 评论 -
android-揭秘热修复黑科技(二)- Tinker
android热修复方案二- Tinker上一节讲了各个热门的热修复框架的机制和Tinker热修复的原理,但是还是有一些坑存在的。让我们来看看都存在哪些坑,Tinker框架又是怎么填补的呢?一、android 19 及以下的手机修复失败或报错1.1按照上一节的内容做实验,可以测试出android5.0及以上的手机是没有问题的,可以修复成功,但是在android4.4的手机上运行时修复失败了...原创 2019-12-13 14:13:56 · 351 阅读 · 0 评论 -
android-揭秘热修复黑科技
android热修复方案热补丁方案有很多,其中比较出名的有腾讯Tinker、阿里的AndFix、美团的Robust以及QZone的超级补丁方案。他们的优劣如下:一、Tinker 热修复Tinker通过 Dexdiff 算法将原apk和修复后的apk中的dex文件进行对比,生成差分包,运行时将差分包中的dex和原包中的dex进行合并,从而加载差分包中修复好的类。因为是运行时加载的dex文件,...原创 2019-12-03 16:20:56 · 831 阅读 · 0 评论 -
项目迁移到Androidx,在低版本手机运行时,Checkbox设置button为null不起作用
记录项目迁移到androidx的一个坑 androidx是goggle对support包进行了整合的一个库,用来替代support,而google也会逐步放弃对support库的升级和维护,所以我们项目再不久前就进行了迁移。 &nb...原创 2019-10-29 20:14:25 · 1455 阅读 · 0 评论