Android进阶-广度之旅
文章平均质量分 96
很多开发者都处于这条道路,能走到走到最后的人寥寥无几,所以这里开始,广度学习,但广度学习并不是只见森林而不见树木,所以学习上还是需要注意关键点,直至最后的深度探索。
petterp
无限进步
展开
-
由浅入深,聊聊OkHttp的那些事(很长,很细节)
本篇将从背景开始,由浅入深,从设计思想到源码导读,与你一起剖析OkHttp的那些事,从而解锁Android网络库的知识拼图。原创 2023-02-13 09:53:52 · 1711 阅读 · 1 评论 -
由浅入深,聊聊 LeakCanary 的那些事
LeakCanary 是一个帮助Android开发者运行时检测内存泄漏的必备利器,而了解其背后的设计原理也更是每个应用层开发者必经之路。故此,本篇将与你一起,解密LeakCanary背后的黑魔法。原创 2023-01-30 18:35:34 · 828 阅读 · 0 评论 -
由浅入深,详解ViewModel的那些事
ViewModel作为JetPack的组件之一,其本身承担着不可或缺的作用,而了解其设计思想也是每个开发必备技能。故本篇将从背景与使用方式开始,再到源码解析,由浅入深,详解ViewModel方方面面。原创 2023-01-10 13:17:31 · 592 阅读 · 0 评论 -
求知 | 聊聊Android资源加载那些事 - Resource的初始化
本篇将由浅入深,解释Android Resources初始化的流程,以及context.resources 与 Resources.getSystem() 的不同之处。原创 2022-12-06 21:29:32 · 804 阅读 · 0 评论 -
由浅入深,详解 LiveData 的那些事
LiveData,一直是JetPack最常用的组件之一,而深入并理解LiveData更是每个开发者的基本功,本篇将由浅入深,从设计思想到源码,再到关联问题,从而真正吃透其本质。原创 2022-12-06 21:25:17 · 1152 阅读 · 0 评论 -
由浅入深,详解 Lifecycle 生命周期组件的那些事
本文将深入浅出,从背景到源码实现,分析Lifecycle本身的设计思想,从而为理解JetPack系列库迈下第一步。原创 2022-12-06 21:22:24 · 389 阅读 · 0 评论 -
求知 | Android资源加载的那些事 - 小试牛刀
本篇将由浅入深,从源头理清 Resource.getx() 的那些事,从而为理解 Android资源加载 迈出第一步。原创 2022-10-11 22:40:50 · 879 阅读 · 0 评论 -
Kotlin | 关于协程异常处理,你想知道的都在这里
关于协程的异常处理,一直以来都不是一个简单问题。因为涉及到了很多方面,包括 异常的传递 ,结构化并发下的异常处理 ,异常的传播方式等,本篇将由浅到深,帮你搞清这些问题。原创 2022-08-11 15:46:18 · 1125 阅读 · 0 评论 -
ViewPager中Fragment状态保存的哪些事
Hi ,很高兴见到你!引言在使用 ViewPager 时 , 如果我们的适配器使用的是 FragmentStatePagerAdapter ,那么当我们重新滑到之前已销毁的页面时,一般情况下页面的状态依然将保持不变(比如 RecyclerView 的 滚动位置等,EditText 的 输入内容 等), 或者说 View 历史状态被还原了。本文的主旨就是解释其 保存与还原内部的原理以及过程。基础概念ViewPager 官方的适配器有两种,即 FragmentPagerAdapter 以及 Fragm原创 2022-04-20 23:51:53 · 629 阅读 · 0 评论 -
山川湖海 - Android无障碍代理的那些事
Hi,很高兴见到你!本篇是无障碍系列第二篇 - Android无障碍代理的那些事本篇将聊一聊什么是无障碍代理,及结合实际场景,分享一下我们对于无障碍代理的使用,并且如何让其更加易用。什么是无障碍代理?当用户在无障碍模式下时,用户在界面上与View的所有操作,都会触发相应的无障碍事件,这些事件最终由 无障碍服务处理 ,其会利用这些事件中的信息生成反馈和提示。自Android1.6(Api-4)开始,Android提供了相应的无障碍事件的代理扩展,我们可以通过实现相应的无障碍代理类(Accessi.原创 2022-04-20 23:48:54 · 2551 阅读 · 0 评论 -
Gradle基础|自定义插件并上传到JitPack
Hi???????? ,很高兴见到你!开发两年了,我想认真学一下Gradle,这是我的2022技术进阶计划,Gradle系列的第二篇,希望对你有所帮助。引言每一个使用 Gradle 的同学,肯定都听过或者写过插件,因为其本身并不难,但碍于现在网上的文章千篇一律,大部分都比较老,新同学一上手反而是和我一样,花了大把时间在最基础的第一步如何写一个简单demo上。再者如果大家使用 AndroidStudio BumBlebee 去创建项目,那对照网上教程差别更大,甚是花费时间,而本篇就是帮你省掉这些时间。原创 2022-02-08 09:25:10 · 1877 阅读 · 0 评论 -
山川湖海 - Android无障碍功能优化实践
Hi,很高兴见到你!????????本文主要分享Android无障碍功能的一些优化经验,希望看完本篇,可以帮助到你,以及哪些特殊的用户。前言最近我们团队收到了一些用户的反馈:有用户反馈,我们的部分功能按钮在无障碍下无法正常识别。其实这已经不是我第一次看到反馈了,第一次是16年ios端收到了用户的反馈,进行过一次优化。说来惭愧,反而是我们 Android 这边也一直没有专门进行过适配。什么是无障碍功能?对于一些视障人群或者听障人群而言,普通的App对它们来说使用起来可能困难重重。在 Androi原创 2022-01-24 15:24:49 · 3713 阅读 · 0 评论 -
哪怕不学Gradle,这些开发中的常见操作,你也值得掌握
Gradle 是每个 Android 同学都逃不开的一个话题。你是否看到别人的 Gradle 文件干净又卫生?而自己的又是一团乱麻????不用怕,本篇将结合我的开发日常,将一些常用的操作分享出来,希望可以帮到像我一样不怎么会[玩]Gradle 的同学,相信会对大家有所帮助。模板代码提取这是最基础的操作了,对于一个普通 model.gradle ,默认的配置如下:如果我们每个 model 都这样写,那岂不是很麻烦,那么让我们提取通用代码:优化步骤新建一个 gradle 文件,命名为 xxx.原创 2022-01-17 10:07:35 · 2389 阅读 · 0 评论 -
浅谈2022Android端技术趋势,什么[值得]学?
2021 已经过去了,那么 2022 ,原生Android 端会有什么技术趋势呢?又有哪些 [新] 技术值得我们去学?对我们开发者而言,Android团队 又是如何推荐的呢?原创 2022-01-16 23:55:35 · 2230 阅读 · 0 评论 -
如何写一个Compose状态页组件 (修正篇)
在上个月前,我写了这样的一篇文章,开源 | 如何写一个好用的 JetPack Compose 状态页组件 。里面讲了如何去写一个 compose 状态页组件,结果这反而是错误的开始,本篇就是对上述的一个修正及反思过程。反思在上篇中,我简单实现一个 compose 中的状态页,但为了解决重组后造成的重新加载问题,当时没有想到该更好的如何处理这个问题,于是采用了命令式的方式去操纵实现了整个流程,这与 compose 的声明式明显格格不入。旧的整体流程如下所示:在 viewModel 中定义了一个当前状原创 2021-12-17 11:16:40 · 1033 阅读 · 0 评论 -
开源 | 如何写一个好用的 JetPack Compose 状态页组件
引言世界很大,也很小,组件很多,也很少。关于开发中常见的状态页组件,我们已经见了很多,但是在 JetPack Compose 中该如何去写呢?虽然也有大佬写了相关demo ,但是如果要应用到实际中,不免有些捉襟见肘 。本篇要解决的就是如何定制一个符合 实际开发 的状态页工具,并分析具体原理与设计思路。效果图这个效果图很简单,就是普通的一个状态页,所以也没什么值得说的,我们接下来分析一下,如果要实现一个状态页组件,需要有哪些基础功能。需求分析支持 compose 与 view分层设计,按需原创 2021-11-04 18:04:56 · 599 阅读 · 0 评论 -
浅析 JetPack Compose 是如何安装到View视图上
Hi , : )看完本文可以帮你解开什么问题?为什么 Compose 无需在意 view 层级问题,怎样嵌套都行? (最简单10s就能明白);Compose 如何安装到传统 View 视图上;门外汉-从布局窥一眼这是一段 Compose 的简单代码,我们演示了多层嵌套下的示例:如果按照传统 View 的思维,我们不难发现,当前 content(R.id.content(FrameLayout)->) 布局中存在5层嵌套,这是极不可取的一种做法。但是现在是 Compose ,最终的绘原创 2021-11-01 14:09:20 · 578 阅读 · 0 评论 -
JetPack Compose主题配色太少怎么办,来设计自己的颜色系统吧
引言JetPack Compose 正式版已经发布好几个月了,在这段时间里,除了业务相关需求之外,我也开始了 Compose 在实际项目中的落地实验,因为一旦要接入当前项目,那么遇到的问题其实远远大于新创建一个项目所需要的问题。本篇要解决的就是 Compose 默认 Material 主题颜色太少,如何配置自己的业务颜色板,或者说,如何自定义自己的颜色系统,并由点入深,系统的分析相关实现方法与原理。问题在开始之前,我们先看看目前创建一个 Compose 项目,默认的 Material 主题为我们提供原创 2021-10-27 18:36:01 · 1929 阅读 · 3 评论 -
Android免权限悬浮窗组件 - FloatingX
FloatingX ,一个强大的免权限悬浮窗组件,支持全局,以及局部悬浮窗。背景在前几个月的业务开发中,我们 app 需要对悬浮窗进行更改,常见的悬浮窗实现方式分为两种:前者是获取权限后,利用 WindowManager 实现后者是基于 DecorView 实现的插入悬浮窗选用怎样的方案,主要根据业务的定向, 因为我们的业务不是视频通话类,而是菜谱工具类,所以我们不愿意让用户为此去设置中授予权限,这是一件成本较大的事,故采用了后者的方案,业内知乎也使用的这种方案。在之前的版本中,我们已经采用原创 2021-08-11 11:52:07 · 2408 阅读 · 3 评论 -
源码分析 | AppCompatActivity-setContentView 之我大意了
HZWZ现在的年轻人一上来就粘源码,对我这样一个小菜瓜,这样合适吗,这样不合适。背景故事是这样开始的有一天,我发现自己写的布局没有按照我的想法打印带上了莫名其妙的开头有一天,两个年轻人,不讲武德非要告诉我这是 AppCompatActivity 的原因我不信他们偷袭,显然是有备而来我大意了我没有闪今天,我要自证事实混元门代码 第三代大弟子,打工牛子 参见熟悉的味为什么会这样,明明是一个普通的TextView,为什么变成了Ma.原创 2020-11-22 11:58:24 · 515 阅读 · 0 评论 -
源码分析 | Activity-setContentView 我都不带闪
我知道大家都很讨厌读别人写的源码分析,因为动不动就长篇大论,不讲武德,这样合适吗,这样不合适。于是,这是一篇不一样的源码分析,如果看完你还说不懂。年轻人,我劝你:引言普通的一个 Activity-setContentView(),你知道它内部做了什么吗?概要源码分析我们先来看一下Activity-setContentView方法:public void setContentView(@LayoutRes int layoutResID) { getWindow().setConten原创 2020-11-21 14:12:24 · 346 阅读 · 0 评论 -
开源组件 | ☁️CloudAAC,一个基于JetPack-AAC的Android通用化框架
基于AAC的模块化组件库,采用组合的方式提高现代化Android开发体验。什么样的框架适合你?什么样的框架也许都不适合你。什么要推荐CloudAAC ?与大千你我一样,皆是从 无架构到MVC->模块化->MVP-> MVVM->AAC->组件化AAC。很多时候,我有在考虑,我们真的需要过度去设计吗?可能有人喜欢 BaseVMFragnment,但有些时候,我们真的需要ViewModel吗,我们真的只有一个ViewModel吗,我可能真的不想去写,对于2020的今原创 2020-09-09 18:30:50 · 995 阅读 · 0 评论 -
抬头看天 | 谈谈移动端抓包方式和原理及如何防犯中间人攻击
抓包对每一个开发者来说,应该说是最基本的技能之一,最近因公司需求接触了一些抓包相关,也遇到了一些奇怪的问题,于是做一个简单的记录,希望对大家有所帮助哈。移动端常用抓包工具工于利其事,必先利其器 ,要抓包,怎么可能没有好的工具,对于普通抓包来说,我们有下面几个工具Fiddler在 windows 环境非常好,提供了一系列抓包方式及后续的脚本,划重点,脚本,这也是众多人喜欢的原因。注意:在mac支持很差,新版软件缺少核心功能脚本,体验很差。Charles体验nice,在Mac,windows.原创 2020-08-04 17:54:38 · 957 阅读 · 0 评论 -
View工作原理分析1 - 初识ViewRoot和 DecorView
注: 以下相关资料均来自 Android艺术探索,部分内容加入了一些我个人的理解。ViewRoot和DecorView相关分析ViewRoot对应于 ViewRootImpl 类,它是连接 WindowManager和 DecorView 的纽带,View 的三大流程均是通过ViewRoot来完成的。在ActivityThread 中,当Activity 对象被创建完毕后,会将DecorView添加到Window中,同时会创建 ViewRootImpl 对象,并将ViewRootImpl对象和 De.原创 2020-07-26 21:26:09 · 474 阅读 · 0 评论 -
Hilt-依赖注入框架上手指南
Hilt 是Google 最新的依赖注入框架,其是基于Dagger。对于Android开发者来说,Hilt可以说专门为Android 打造,提供了一种将Dagger依赖项注入到Android应用程序的标准方法,而且创建了一组标准的组件和作用域,这些组件会自动集成到Android应用程序的各个生命周期中,以简化开发者的上手难度。在学习本文之前,假定大家已经了解依赖注入是什么,如果没有了解过,可以先了解概念。Hilt 的目的是降低Android 开发者使用依赖注入框架的上手成本,但是基本的理念大家还是要明.原创 2020-06-15 21:00:54 · 17496 阅读 · 11 评论 -
Android Fragment懒加载新思路
在Android x以前,我们实现懒加载通常是通过 setUserVisibleHint 方法来控制Fragment是否可见。在Android x之后,Google 提供了新的方案给我们。今天我们就来学习一下。如果在Android x中直接使用以前的方案,会提示如下,方法已过时:点进去查看注释:大概就是这个方法可以告诉当前Fragment的是否对用户可见,但是可以在生命周期外调用,...原创 2019-12-04 00:55:59 · 624 阅读 · 0 评论 -
浅谈Android热修复的前因后果与实现原理。
最近一个月本该来说时间应该最多,但却没有写几篇博客,真是惭愧啊。最近在集成热修复,正好周一要进行技术分享,所以就来好好梳理一下 热修复的前因后果。首先,我们需要持有以下几个问题:什么是热修复?它可以帮我解决什么问题?热修复的产生背景?热修复的基本原理是什么?如何选择热修复框架?热修复的注意事项热修复与多渠道?自动化构建与热修复?上面一共有7个问题,如果是新同学的话,后面...原创 2019-11-25 16:39:11 · 753 阅读 · 3 评论 -
手把手教你封装一个健壮的MVP框架,面向接口开发。
在我们的日常开发中,我们都知道 Android 端的开发框架有 MVC,MVP,MVVM,说起这几个框架,大家也肯定都有自己的看法,甚至很多同学也都封装过。问题来了:现在不都是 MVVM 了吗,你还写MVP干吗,有用吗,网上那么多轮子,找个 star 高的不就行了。使用和自己动手封装完全是两个过程,需要考虑多方面,这其中需要踩很多坑。目前这个框架已经应用在我写的公司项目上。趁最近有时间,对框...原创 2019-11-08 20:47:06 · 1047 阅读 · 1 评论 -
Android内存优化-Bitmap内存优化
为什么Bitmap需要高效加载?在日常开发中,我们不免会使用到Bitmap,而bitmap确实实在在的是内存使用的 “大户”,如何更好的使用 bitmap,减少其对 App内存的使用,是我们开发中不可回避的问题。为了解决这个问题,就出现了Bitmap 的高效加载策略。其实核心思想很简单。假设通过InmageView 来显示图片,很多时候 ImageVIew并没有原始图片的尺寸那么大,这个时候把...原创 2019-09-08 20:05:27 · 531 阅读 · 0 评论 -
Android NDK开发初试(基础)
首先,什么是NDK开发,听到这个词,我的第一感觉是高大上的,其实倒也没错,NDK在Android开发中属于偏底层的,需要与C++等进行联系,它没有像应用层开发那么灵活,但是作为开发者,我们必须了解其简单的使用,及为什么要使用它?说起NDK,不得不提的一个关键点就是JNI。JNI诞生的本意是为了方便 Java调用C,C++等本地代码而封装的一层接口。我们都知道。Java的优点是跨平台,但是作为优...原创 2019-09-19 21:22:34 · 797 阅读 · 0 评论