前言 在本系列文章中,我提到过:Window的操作分为两大部分,一部分是WindowManager处理部分,另一部分是WMS处理部分,Window的删除过程也不例外,本篇文章会介绍Window的删除过程...Window的删除过程 和Android解析WindowManagerService(二)WMS的重要成员和Window的添加过程这篇文章中Window的创建和更新过程类似,要删除Window需要先调用...注释1处的mRemoved为true意味着正在执行删除Window操作,注释1到注释2处之间的代码用于防止重复删除操作。...Window的删除过程就讲到这里,虽然删除的操作逻辑比较复杂,但是可以简单的总结为以下4点: 检查删除线程的正确性,如果不正确就抛出异常。...从ViewRootImpl列表、布局参数列表和View列表中删除与V对应的元素。 判断是否可以直接执行删除操作,如果不能就推迟删除操作。 执行删除操作,清理和释放与V相关的一切资源。
而 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,广泛应用于各种数据的交互中,尤其是服务器与客户端的交互。...: JSONObject、JSONArray 和 Android 自带的差不多,参见上篇 Android网络传输数据json解析的基本认识 JsonNull:实际上就是 null 的字符串字段 JsonPrimitive...也会解析成 state,当然 state 依旧不变的。...,解析后的值也是state原先的 String json_str3 = "{\"per_id\":1,\"name\":\"layne\",\"sex\":\"man\",\"plus...可以归为一类 由框架实现,基本 json 大格式规范,键值对不标准,多引号的问题等等,而不报错停止解析,但是功能相对较弱,能解决 bug 方式1:Gson 的创建方式 gson = new GsonBuilder
作者:张志伟 团长:腾讯移动品质中心TMQ 一、So的热升级尝试 在Android代码中,加载so库是通过调用System.loadLibrary函数实现的。...但和Android的许多特性一样,只提供了加载,而没有卸载和更换等功能。 为了研究能否实现卸载和升级等功能,首先要了解清楚JNI so加载的流程。...网上有很多加载流程的解析,例如《Dalvik虚拟机JNI方法的注册过程分析》(http://blog.csdn.net/luoshengyang/article/details/8923483)这篇文章中分析出的流程...卸载之后如果我们先尝试调用原来的JNI函数,会发生什么事呢?显而易见会出现crash。...3、使用NewGlobalRef分配并持有Java对象,丢失指针后会造成虚拟机的Java内存泄漏。 综上所述,对于所有可能丢失,造成泄露的资源,必须在卸载so前设法保存或删除。
之前的知识面仅限于框架API的调用,接触到实际的工作之后深知自己知识的不足,故而深挖框架源码尽力吸取前辈的设计经验。...关于此框架的源码解析网上的教程多不胜数,此文名为源码解析,实则是炒冷饭之作,如有错误和不足之处还望各位看官指出。...拦截器 拦截器是OkHttp框架设计的精髓所在,拦截器所定义的是Request的所通过的责任链而不管Request的具体执行过程,并且可以让开发人员自定义自己的拦截器功能并且插入到责任链中 用户自定义的拦截器位于...,此类实现管理连接开闭的策略并使用与连接池一一对应的后台线程清理过期的连接。...相关链接 【Android教程】基于Okhttp的高可用网络框架原理解析
ButterKnife是一个专注于Android系统的View注入框架,有了ButterKnife可以很轻松的省去findViewById,ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的...(其他的有些注解框架可以) 6、使用Activity为根视图绑定任意对象时,如果你使用类似MVC的设计模式你可以在Activity 调用ButterKnife.bind(this, activity)...keepclasseswithmembernames class * { @butterknife.* ; } 2.AbstractProcessor ButterKnife中使用了注解的解析处理器....build(); } 通过createType方法返回TypeSpec,这里的TypeSpec是square公司另一个开源框架javapoet的类,这个框架主要的作用就是生成java代码,关于javapoet...类的实体,这里的target的就是声明了注解的类,这样_ViewBinding就持有了target的引用,剩下的findViewById还有各种设置点击的方法是在_ViewBinding中实现的 这里我仅仅拿一个我写的简单的类进行分析
在看了一些换肤的方法之后,并且对市面上比较认可的Android-Skin-Loader换肤框架的源码进行了分析总结。再次记录一下祭奠自己逝去的时间。...GitHub上面有一个start非常高的换肤框架Android-Skin-Loader 就是通过加载资源包对app进行换肤。对这个框架的分析这个也是这篇文章主要的讲述内容。...Android换肤知识点 换肤相应的API 我们先来看一下Android提供的一些基本的api,通过使用这些api可以在App内部进行资源对象的替换。...LayoutInflater.Factory 看过我前一篇遇见LayoutInflater&Factory文章的这部分可以省略掉. 很幸运Android给我们在View生产的时候做修改提供了法门。...Android-Skin-Loader解析 初始化 初始化换肤框架,导入需要换肤的资源包(当前为一个apk文件,其中只有资源文件)。
前言时光飞逝,一晃就到 2024 的年底了,按照我近年来的传统,就复盘一下今年做过的所有关于探索收入多样性的事情。...视频创作方向不明确不管是我的短视频还是中视频账号风格都还没定型,因为过去都是用来学习新东西后的记录视频,没有真人出镜和真人发声。...平台既不给流量,在观感上也显得不真诚,给人种营销号的感觉,这个只能慢慢摸索方向,之后再尝试出镜和口播。3. 做事容易自嗨以前我觉得我还算理智,但其实大部分情况下,我是很容易陷入自嗨模式的。...总结2024 年我的复盘结论就是 “持续尝试”,告别技术崇拜,但依然相信技术改变世界。二者不矛盾,但技术服务于业务,必须建立在价值产出之上。...世界总是向熵增的方向演进,总是向着混乱发展,唯一不变的就是变,多方面尝试,多试错,快改进,难办就推倒重来,就算是草台班子也能找到一个方向,最后我也希望 2025 年的复盘主题是 “持续深耕”!
大家好,又见面了,我是你们的朋友全栈君。...ActivityManager在操作系统中有重要的作用,本文利用操作系统源码,逐步理清ActivityManager的框架,并从静态类结构图和动态序列图两个角度分别进行剖析,从而帮助开发人员加强对系统框架及进程通信机制的理解...的代码,并以此揭示ActivityManager的整体框架。...当然,Binder的实现还是很复杂的,不仅是类型转换,还要透过Binder驱动进入KERNEL层来完成进程通信,这些内容不在本文的范围之内,故此处不再深入解析相应的机制。...动态序列图 我们以ActivityManager的getRunningServices()函数为例,对上述序列图进行解析。
今天我们要解析的 android-pluginmgr 插件化框架就是基于这种思想的。...android-pluginmgr 框架的用法(来自于 android-pluginmgr 的 README.md ): 基本的用法就像以上这五步,另外需要注意的是,“插件”中所需要的权限都要在“宿主...我相信这个异常大家很熟悉的吧,在刚开始学习 Android 时,大家都会犯的一个错误。...所以,我想我们也明白了为什么要花这么大的一个功夫去动态地替换要创建的 Activity ,就是为了绕过这个 ActivityNotFoundException 异常,达到去“欺骗” Android 系统的效果...android-pluginmgr流程图 最后,如果对本文哪里有疑问的童鞋,欢迎留言,一起交流。 0x05 References 包建强:为什么我说Android插件化从入门到放弃?
现在Android上的图片加载框架非常成熟,从最早的老牌图片加载框架UniversalImageLoader,到后来Google推出的Volley,再到后来的新兴军Glide和Picasso,当然还有Facebook...但是它们的使用场景基本都是重合的,也就是说我们基本只需要选择其中一个来进行学习和使用就足够了,每一个框架都尝试去掌握的话则有些浪费时间。...当然,这里我说的是对它的源码进行解析的难度,不是使用上的难度,Glide的用法是很简单的。所以,我觉得去年我写不好Glide这个题材的文章,也就一直拖到了今年。...也就是说,不管我们传入的是一张普通图片,还是一张GIF图片,Glide都会自动进行判断,并且可以正确地把它解析并展示出来。 但是如果我想指定图片的格式该怎么办呢?...感兴趣的朋友请继续阅读 Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程 。
前言 上一篇文章Android项目解耦--路由框架ARouter的使用讲述了ARouter在项目中的使用,这边文章主要对ARouter的源码进行学习和分析。...arouter-annotation注解的声明和信息存储类的模块 arouter-compiler编译期解析注解信息并生成相应类以便进行注入的模块 arouter-api核心调用Api功能的模块 annotation...api部分我们可以参数上一篇文章Android项目解耦--路由框架ARouter的使用,ARouter实现我们具体在下面讲解。 ARouter的工作流程 ?...com.android.tools.fd.runtime.Paths这个类是不存在的。...框架对整个路由功能的模块划分以及像拦截器、降级处理、替换路径以及分组加载等。 RouterHelper GitHub地址 文章到这里就全部讲述完啦,若有其他需要交流的可以留言哦!!
在做UAF的时候,我产生了一个需求:我希望我可以把demo,UAF Client,UAF ASM分别打包成3个apk,又可以打包成1个apk。...当分别打包的时候,UAF Client/UAF ASM是application;统一打包的时候,UAF Client/UAF ASM是library。我开始进行尝试。...plugin: 'com.android.library',release的时候apply plugin: 'com.android.application'。...但同时我发现了一个有趣的现象:在这个配置之下,我导出demo-release.apk的同时,UAF Client和UAF ASM的release.apk也一并导出了。...我猜测是配置过程由于我判断条件的干扰导致的。
下面讲讲Lego在Android上一次小小尝试 一,MVP简介 ? MVC太过常见这里不啰嗦。实际应用MVC当中,Activity占据打部分的工作,View和Controller的身份分不清。...Model 在MVP设计模式中, View:由Activity充当,并且响应生命周期 Model:还是原来的数据层,网络,缓存,解析等。...我是爸爸,我有两个儿子 2. 我两个儿子不争气,需要我来喂养数据,自己不会挣钱(自己不拉数据) 3....全家我是一家之主,启动我说了算(Lego启动boot后,会自己拉数据自己渲染,同时子Lego也会相继boot) 日迹710这里就有场景,体验出Lego切换数据源的优势。...接口之间约束,不够自由 但是对比MVP,Lego能体验出轻便,逻辑清晰,方法数量少的优势。 Lego页面结构化的应用其实还在尝试阶段。以上算我的一些个人思考和总结。
下面讲讲Lego在Android上一次小小尝试 一,MVP简介 ? MVC太过常见这里不啰嗦。实际应用MVC当中,Activity占据打部分的工作,View和Controller的身份分不清。...Model 在MVP设计模式中, View:由Activity充当,并且响应生命周期 Model:还是原来的数据层,网络,缓存,解析等。...,我们得知 我是爸爸,我有两个儿子 我两个儿子不争气,需要我来喂养数据,自己不会挣钱(自己不拉数据) 全家我是一家之主,启动我说了算(Lego启动boot后,会自己拉数据自己渲染,同时子Lego也会相继...顶层Lego情况复杂,底层统一优化不好做 接口之间约束,不够自由 但是对比MVP,Lego能体验出轻便,逻辑清晰,方法数量少的优势。 Lego页面结构化的应用其实还在尝试阶段。...以上算我的一些个人思考和总结。 ---- 如果您觉得我们的内容还不错,就请转发到朋友圈,和小伙伴一起分享吧~
因此,你需要一个易于使用的CSS框架,它能够提供现成的UI元素。 下面,我们来看看2024年值得尝试的最佳CSS框架。...它与其他 UI 框架在结构和设计哲学上有所不同。不同于其他遵循传统 BEM 方法论的框架,UIKit 采用了基于组件的结构。...每个框架都有其独特的特点、优势和可能的限制,因此了解如何根据项目的具体需求挑选合适的框架是一项重要的技能。...研究框架的特性:深入了解每个框架的核心特性、设计理念和社区支持情况。 评估学习曲线:尝试了解开始使用框架并达到一定熟练度所需的时间和努力,确保团队能够快速上手。...这将帮助你直观地感受到使用框架的便利性和可能的挑战。 性能考量:测试每个框架生成的 CSS 的大小和加载时间,确保它们不会对最终用户的体验产生负面影响。 社区和资源:考虑框架的社区活跃度和可用资源。
简介 最近几年,腾讯对于开源事业也是越来越支持,今天要说的就是在腾讯被广泛使用的Shadow框架,一个经过线上亿级用户量检验的反射全动态Android插件框架。...首先,让我们来看一下官方对于Shadow的简介: Shadow是一个腾讯自主研发的Android插件框架,经过线上亿级用户量检验。...SDK接口,支持Android 9.0的插件框架,在它的Sample中开启严格模式运行后,出现了如下Crash信息: W/.xxx.sampl: Accessing hidden method Landroid...Shadow框架的原理示意图如下: 集成Shadow 环境准备 第一次clone Shadow的代码到本地后,建议先在命令行编译一次。 在编译前,必须设置ANDROID_HOME环境变量。.../gradlew build 如果没有出错,再尝试用Android Studio打开工程。 必须使用3.4或更高版本的Android Studio打开工程。
Service作为Android四大组件之一,其功能之一就是耗时操作的执行,主要功能如下: 执行需要长时间运行的操作,这个操作不与用户进行交互,如网络下载、大文件I/O、复杂计算。...应用内或应用间数据通信,Android每个应用程序都在自己的dalvik虚拟机中运行,一个应用是不允许访问其他应用的内存信息的,为此Android引入了Content Provider在不同应用间共享数据...Service与Thread的区别如下: Service是android的一种机制,当它运行的时候如果是Local Service,那么对应的Service是运行在主进程的main线程上的。...IntentService IntentService的概念 IntentService是Android中的一个系统封装类,继承自四大组件之一的Service,主要用于处理异步请求,实现多线程,它有以下特点...开发12 客户端 · 目录 上一篇Android多线程的种类及使用方法下一篇Android组件之ContentProvider
1、MVP框架说明 MVP的通用解释如下: View 对应于Activity,负责View的绘制以及与用户交互; Model 负责处理数据的加载或者存储,比如从网络或本地数据库获取数据等; Presenter...负责完成View于Model间的交互,主要起到桥梁作用,是一个中间协调人的角色。...从代码实现的角度,简单的来说MVP的关系,V调用P的方法来实现某个用户具体行为的操作(比方点击某个按钮代表的点赞),并提供接口给P来更新界面;P通过M获取或者提交数据做相关的业务,M可以提供同步或者异步的方法来完成...2、MVP框架改进 简单通过MVP框架去实现功能后,会发现: V可能给P封装了接口太多,P需要关注很多更新界面的行为 另外一个V通常需要对应一个P来做相应的行为,类的数量无形增多了。...如何改进其实是见仁见智了,对框架的使用,第一步是僵化,也就是照着框架给的方法去实现,第二步则是优化,能够提炼出适合自己或者项目的通用架构来,也就是收获满满了。
在本系列的上一篇文章中,我带着大家一起阅读了一遍Glide的源码,初步了解了这个强大的图片加载框架的基本执行流程。...不过今天文章中的源码都建在上一篇源码分析的基础之上,还没有看过上一篇文章的朋友,建议先去阅读 Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程 。...LruCache的用法也比较简单,我在 Android高效加载大图、多图解决方案,有效避免程序OOM 这篇文章当中有提到过它的用法,感兴趣的朋友可以去参考一下。...我之前也专门写过一篇文章对这个DiskLruCache工具进行了比较全面的分析,感兴趣的朋友可以参考一下 Android DiskLruCache完全解析,硬盘缓存的最佳方案 。...下一篇文章当中,我会继续带着大家深入分析Glide的其他功能模块,讲一讲回调方面的知识,感兴趣的朋友请继续阅读 Android图片加载框架最全解析(四),玩转Glide的回调与监听 。
如果你还没有阅读过前面四篇文章的话,那么可以点击后面的链接,依次向前阅读 Android图片加载框架最全解析(四),玩转Glide的回调与监听。...不过Glide的这个框架的功能实在是太强大了,它所能做的事情远远不止于目前我们所学的这些。因此,今天我们就再来学习一个新的功能模块,并且是一个非常重要的模块——Glide的图片变化功能。...当然,本文中的源码还是建在第二篇源码分析的基础之上,还没有看过这篇文章的朋友,建议先去阅读 Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程 。...最后,尝试将复用的Bitmap对象重新放回到缓存池当中,并将圆形化变换后的Bitmap对象进行返回。 这样,一个自定义图片变换的功能就写好了,那么现在我们就来尝试使用一下它吧。...下篇文章中我们会继续深入探究Glide,学习一下自定义模块的功能,感兴趣的朋友请继续阅读 Android图片加载框架最全解析(六),探究Glide的自定义模块功能 。
领取专属 10元无门槛券
手把手带您无忧上云