
我的Android进阶之旅
文章平均质量分 87
1. 本专栏已有500+篇博客,还在持续更新中。。。
2. 本专栏已有700+读者订阅,还在持续订阅中。。。
3. 本专栏价格会根据运营平台政策调整而波动,价格会持续上涨,越早买越便宜!
4. 本专栏涵盖内容涉及Android各种知识点:Kotlin、Java、C++、ASM、OpenGL渲染等
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
字节卷动
字节卷动 | CSDN博客专家
博客知识包括:Android、ASM、OpenGL、C++、Java、Kotlin、Python、Shell、Jenkins、Gitlab、Git、SVN等相关进阶知识。
展开
-
【我的Android进阶之旅】如何使用NanoHttpd在Android端快速部署一个HTTP服务器?
物联网设备的控制中枢本地文件的共享基站快速验证API的Mock平台下次可以试试结合WebSocket做实时通信,或者用这个方案实现离线版接口Mock工具。NanoHttpd就像Android界的乐高积木——轻量、灵活,15分钟就能搭出一个功能完备的HTTP服务器。无论是调试H5页面、实现设备间数据传输,还是给产品经理秀技术肌肉,都是绝佳选择。一个优秀的Android工程师,应该既能用OkHttp当客户端,也能用NanoHttpd当服务端——这才是真正的"HTTP全栈"!原创 2025-03-04 23:11:55 · 283 阅读 · 0 评论 -
【我的Android进阶之旅】Android Studio SDK Update Site 国内的腾讯云镜像配置指南
在右侧找到 SDK Update Sites 列表,添加如下链接,像下面一样,一个一个添加。点击 OK 完成设置,重启 Android Studio 后尝试更新 SDK 以验证速度提升。路径:Tools–>SDK Manager。将下面四个链接都加上去。原创 2025-02-22 16:33:56 · 492 阅读 · 0 评论 -
【Android面试八股文】Android面试必看之插件化技术揭秘:面试官问你的每个问题都在这里!
所以,我们可以注意到,每次应用升级的一段时间内,我们的启动时长会出现波动,过了几天以后,又会达到稳定的状态。保证了收到类加载请求的时候,优先让父类加载器去加载,父类加载器处理不了的时候,才会自己去加载,保证了类加载机制的稳定性。所以我们对不同的插件包,进行打包的时候,前面的PP字段,可以进行依次递减,可以避免资源冲突的问题。对于我们安卓系统来讲,仅仅能够加载插件中的类显然是不够的,还要能够启动插件中的的。但这种方式会丢失插件化的动态性,也就是说,如果想在插件包中,加入宿主包没有注册的。原创 2024-12-19 22:47:50 · 180 阅读 · 0 评论 -
【Android面试八股文】面试官陷阱题:你能深入讲解一下Native内存与GC的联系吗?Native内存膨胀过多时会触发GC吗?如何在Java对象回收时触发Native内存回收?
Native内存的膨胀确实可以触发GC,尤其是在ART中,这种机制被用来确保Native内存的有效管理,防止因Native内存泄漏导致的内存问题。了解这一机制对于优化应用性能和处理内存泄漏问题至关重要。这也是为什么在面试中,理解Native内存与GC之间的联系是一个重要的知识点。原创 2024-12-14 16:17:33 · 141 阅读 · 0 评论 -
【我的Android进阶之旅】使用Kotlin 代理/委托优雅地处理接口空实现:干掉接口中所有需要强制实现的但是无用的空方法实现!
如果我们能够把 ActivityLifecycleCallbacks 所有的空实现方法就干掉就清爽了。原创 2024-12-14 15:04:34 · 357 阅读 · 0 评论 -
【Android面试八股文】你能深入剖析一下ArrayMap吗?它到底是Android开发中的性能利器还是隐藏的地雷?
当需要分配新的数组时,首先尝试从缓存中获取,而不是直接进行新的内存分配,这进一步优化了内存的分配和回收。普通业务场景下,笔者还是倾向。缓存池受到污染后,可能并不会引起崩溃,而是把隐患埋了下来,当下一次,在其它业务场景下,通过。,但由于其使用场景多为内存受限的小数据集操作,这种对数级别的时间复杂度是可以接受的。通过使用两个数组来存储键值对,减少了内存分配的次数,从而降低了垃圾回收的压力。就厉害了,并发场景下,一个数据异常,会影响到其它场景的其它。中的缓存池设计真的合理吗,如果不合理,为何其所在的。原创 2024-12-14 13:49:25 · 91 阅读 · 0 评论 -
【Android面试八股文】你开发过程中有调用过定制化framework.jar包的接口吗?在Android Studio中如何集成定制化的framework.jar?
导入项目中,以一个简单 Demo 项目举例,项目中有一个 app 模块,项目结构如下(只列出了关键文件)第一个问题毫无疑问,如果你是在相关的硬件厂商的话,基本上都是需要定制化开发的,这样你们公司编译出来的。配置完之后,点击Build->Make Project ,重新编译项目,使配置生效。配置完之后,点击Build->Make Project ,重新编译项目,使配置生效。,但是仅仅是让编译通过,不会打包到apk里面,也不需要。我这边工作中是有相关的业务,所以会调用。,无法编译,此时,我们就需要将定制化的。原创 2024-11-28 21:22:12 · 331 阅读 · 1 评论 -
【我的Android进阶之旅】Android Studio插件RainBow Brackets没有许可证怎么办?有没有什么替代品?RainBow Brackets超过一千行的代码失效怎么办?
直接去插件市场搜 【Rainbow Brackets Lite 】彩虹括号精简版 免费和开源,这个插件是原来插件的精简版,且免费。安装好后重启Android Studio即可,将原来的需要收费的【RainBow Brackets】插件 Disable掉。从6.26版本后,从2022.3.1版本开始 原Rainbow Brackets插件开始收费。然后点击【OK】按钮,接着将刚刚超过1000行的代码关闭,重新打开,就会发现正常了!可以免费使用30天,30天过后这个插件就失效了,不再高亮,那怎么办呢?原创 2024-11-25 22:35:14 · 688 阅读 · 0 评论 -
使用Kotlin写一个将字符串加密成short数组,然后可以解密还原成原始的字符串的功能
主要功能包括加密字符串、解密字符串、更新和获取加密数据存储库,以及生成随机密钥和解密代码字符串。下面这段Kotlin代码实现了一个字符串加密和解密的工具类。,并提供了主程序来演示其使用。定义待加密字符串数组。原创 2024-11-21 00:13:17 · 590 阅读 · 0 评论 -
【Android面试八股文】讲一讲你对Kotlin协程异常传递与处理的认识
一、协程的异常传递二、 SupervisorJob的作用2.1 使用SupervisorJob2.2 使用CoroutineScope包装SupervisorJob2.3 两者的区别2.3.1 使用 `CoroutineScope` 包装 `SupervisorJob`:2.3.2 直接使用 `SupervisorJob` 启动协程:2.3.3 总结:三、异常处理方式3.1 Launch协程构造器的异常处理3.1.1 try-catch3.1.1.1 launch 方式启动的协程中的原创 2024-11-10 22:18:00 · 179 阅读 · 0 评论 -
【Android面试八股文】你能说说协程的上下文CoroutineContext是什么?如何组合上下文中的元素?协程上下文是怎么继承的?
是一组用于定义协程行为的元素。Job:控制协程的生命周期。通过Job,我们可以启动、取消协程,或者添加协程完成时的回调。:决定协程在哪个线程上执行。允许我们将协程的任务分配到最合适的线程,这对于性能优化和线程管理至关重要。:为协程提供一个名称,这在调试和日志记录时非常有用,因为它可以帮助我们快速识别和区分不同的协程。:处理协程中未被捕获的异常。通过,我们可以捕获并处理这些异常,避免程序崩溃。原创 2024-11-09 14:20:29 · 139 阅读 · 0 评论 -
【我的Android进阶之旅】关于Jenkins平台编译时候,如何获取当前Git分支名、Git TAG名、Git Commit号、编译任务Name、编译版本号 Revision等信息?
一、背景因为代码都迁移到了Gitlab,所以Jenkins编译的时候我们都需要将之前的SVN信息换成现在的Git信息。最近编译一个Lib库的时候,因为团队规定上传Release版本的AAR到Maven的话,必须需要在Jenkins上编译而且Git Branch 必须是master分支才能够上传到Maven。 因此我们就需要在Gradle脚本中,获取Git Branch ,Git Commit...原创 2017-09-02 18:02:26 · 24882 阅读 · 17 评论 -
【Android面试八股文】你能说说Kotlin如何取消超时任务吗?
是 Kotlin 协程中处理超时任务的一个有用工具。它允许我们在超时时优雅地返回一个特殊值,而不是抛出异常。这使得我们可以更加灵活地控制协程的执行流程,特别是在需要处理超时逻辑时。通过使用,我们可以提高程序的健壮性和用户体验。原创 2024-11-03 23:15:09 · 136 阅读 · 0 评论 -
【Android面试八股文】你能说说kotlin怎么实现不能取消的任务吗?你知道NonCancellable吗?
可以用于结构中的任何部分,具体取决于您希望在哪个阶段确保代码不被取消。通常,将其放在finally块中是为了确保无论发生什么情况,某些关键的清理工作都能被执行。但是,根据您的具体需求,您可以灵活地在任何地方使用。是 Kotlin 协程中一个强大的工具,它允许开发者在协程被取消时执行关键的清理工作。使用时,需要仔细考虑代码的设计,确保在任何情况下都能正确地释放资源和处理异常。通过合理使用,可以提高程序的健壮性和可靠性。原创 2024-11-03 23:01:22 · 96 阅读 · 0 评论 -
【Android面试八股文】你能说说kotlin取消协程有什么副作用以及如何修复吗?
use 函数提供了一种简洁的方式来自动管理资源,它减少了样板代码,并确保了资源在使用后被自动关闭。try-catch-finally 块提供了更多的控制,允许你在异常发生时执行额外的清理工作,但它需要更多的代码。在两种情况下,资源管理都是非常重要的,以避免资源泄露和其他潜在的问题。协程取消的副作用主要体现在资源管理和数据一致性上。通过在finally块中释放资源和使用use函数管理实现了Closeable接口的资源,我们可以有效地修复这些副作用。原创 2024-11-03 22:34:42 · 130 阅读 · 0 评论 -
【Android面试八股文】你能说说kotlin怎么取消CPU密集型任务吗?
isActive是一个可以被使用在CoroutineScope中的扩展属性,检查Job是否处于活跃状态。ensureActive(),如果job处于非活跃状态,这个方法会立即抛出异常。yield函数会检查所在协程的状态,如果已经取消,则抛出CancellationException予以响应。此外,它还会尝试出让线程的执行权,给其他协程提供执行机会。原创 2024-11-03 21:57:59 · 114 阅读 · 0 评论 -
【Android面试八股文】你能说说你对协程生命周期的理解吗?
在Kotlin协程编程中,理解协程的生命周期对于编写高效、健壮的并发代码至关重要。本文将详细介绍协程的生命周期,以及如何通过Job对象来管理这些生命周期。原创 2024-11-03 13:45:22 · 119 阅读 · 0 评论 -
【Android面试八股文】你能说说协程的作用域构建器有哪些以及他们的区别吗?(coroutineScope、runBlocking和supervisorScope)
和都是协程中的作用域构建器,它们都可以用来等待多个协程的完成。主要的区别在于会阻塞当前线程,而则不会。选择使用哪一个构建器取决于你的具体需求,以及你是否需要在等待协程完成时释放线程以供其他任务使用。理解这些区别对于编写高效、响应式的协程代码至关重要。原创 2024-11-03 00:11:55 · 324 阅读 · 0 评论 -
【Android面试八股文】你能说说Kotlin协程有哪些启动模式以及它们直接有什么区别吗?
通过上述示例,我们可以看到Kotlin协程的四种启动模式在调度时机和取消响应上有明显的区别。DEFAULT模式下,协程创建后立即调度,对取消响应最敏感;ATOMIC模式下,协程在到达第一个挂起点之前不响应取消;LAZY模式下,协程只有在被需要时才开始调度;而UNDISPATCHED模式下,协程在当前调用栈中立即执行,直到遇到挂起点。原创 2024-11-03 00:03:50 · 209 阅读 · 0 评论 -
【我的Android进阶之旅】解决CardView四个圆角有白边的问题
**背景颜色的影响**:`CardView` 四周出现白边的原因通常是因为 `CardView` **默认情况下有一个背景颜色,它可能是白色或者其他不透明的颜色,用于显示卡片的阴影和圆角效果。** 如果这个背景颜色是白色或者与父布局的颜色不同,它会在边缘显现出来,使得它显示出你所看到的 **“白边”效果** 。`CardView` 自带阴影效果和边框,当你使用图片作为背景时,这种效果可能会显得更加明显。原创 2024-09-10 23:22:07 · 838 阅读 · 0 评论 -
【Android面试八股文】你能说说FragmentPagerAdapter 和 FragmentStatePagerAdapter的区别吗?
的:仅仅调用detach(),将Fragment从 UI 中移除,但Fragment本身仍然保留在内存和中。因此,Fragment没有被销毁,这解释了为什么会保持所有Fragment实例在内存中。这种设计的目的为了避免每次页面切换时重新创建Fragment,从而提升性能,适用于页面较少且页面之间切换频繁的情况。通过保持Fragment在内存中,可以避免重新创建Fragment的开销,从而加快页面切换速度。的:不仅调用remove()彻底销毁Fragment,还保存Fragment的状态。这样,虽然。原创 2024-09-08 15:04:49 · 544 阅读 · 0 评论 -
【Android面试八股文】1. 你说一说Handler机制吧 2. 你知道Handler的同步屏障吗? 3. Looper一直在循环,会造成阻塞吗?为什么?
开启同步屏障的第一步需要发送一个特殊消息作为屏障消息,当消息队列检测到了这种消息后,就会从这个消息开始,遍历后续的消息只处理其中被标记为“异步”的消息一旦Looper在处理消息时遇到屏障消息,那么就不再处理普通消息,而仅仅处理异步消息。所以叫“同步屏障”。相当于给一部分消息开设了"VIP”优先通道。当使用完同步屏障后我们还注意移除屏障。不再使用屏障后,需要撤销屏障,不然就再也执行不到普通消息了。原创 2024-06-13 13:00:33 · 605 阅读 · 0 评论 -
【我的Android进阶之旅】快来给你的Kotlin代码添加Markdown格式的注释吧!
HTML 格式提供更多自定义的标签来精确控制注释的显示方式,适合需要精细控制的文档格式。Markdown 格式更简洁,适合开发者日常使用和快速编写注释。选择哪种格式取决于你的需求。如果需要复杂的格式,HTML 是更好的选择,而对于简单易读的注释,Markdown 更合适。原创 2024-09-01 20:46:43 · 582 阅读 · 0 评论 -
【我的Android进阶之旅】使用TabLayout自定义一个TitleTabView
你需要在</<//*** 自定义视图类,用于实现带有自定义指示器的标题标签页。*/= null= null= nullinit {// 初始化自定义属性// 初始化TabLayout// 初始化自定义指示器// 初始化Tab选择监听器/*** 初始化自定义属性值。* @param context 上下文对象。* @param attrs 属性集对象。*/) {recycle()/*** 初始化TabLayout。*//**原创 2024-09-01 00:09:55 · 618 阅读 · 0 评论 -
【我的Android进阶之旅】 Android官方推荐的依赖注入框架:Dagger Hilt
除了@Singleton,Hilt 还提供了其他预定义的作用域,或者你可以自定义作用域。比如为某些对象定义一个Activity@Scope@Module@ProvidesHilt是一个强大的依赖注入工具,简化了 Dagger 的使用。它提供了模块、作用域、注入点等概念,帮助管理 Android 应用中的依赖关系。通过注解,Hilt 可以轻松注入依赖到 Android 的四大组件中。模块@Module) 用于定义如何提供依赖项,作用域@Singleton) 确定了依赖项的生命周期。原创 2024-08-29 23:37:38 · 600 阅读 · 0 评论 -
【我的Android进阶之旅】【亲测有效,直接起飞!】解决Gradle下载过慢、下载gradle失败的问题的有效解决方式:使用国内镜像站点(腾讯镜像、阿里镜像、华为镜像)
服务,但由于网络环境不同以及其他因素,有时候从官方网站下载Gradle可能会面临下载速度缓慢或者超时的情况。针对这个问题,我们可以考虑使用国内镜像站点来加速Gradle的下载过程。为了解决Gradle下载过慢的问题,我们可以利用国内优秀的镜像站点来加速下载。通过使用这些国内镜像站点,我们可以更快地获取Gradle的安装包,避免官方下载地址带来的下载速度问题,从而提高我们的开发效率。打开上面的Gradle镜像网址,找到你现在项目所需的Gradle版本,然后复制链接。有时候速度可以,有时会根本下载不下来。原创 2024-08-24 23:50:35 · 669 阅读 · 0 评论 -
【Android面试八股文】你能说说LRU算法的原理并简单实现一下LRU算法吗?
LRU是的缩写,这种算法认为最近使用的数据是热门数据,下一次很大概率将会再次被使用。而最近很少被使用的数据,很大概率下一次不再用到。当缓存容量满的时候,优先淘汰最近很少使用的数据。假设现在缓存内部数据如图所示:这里我们将列表第一个节点称为头结点,最后一个节点为尾结点。当调用缓存获取key=1的数据,LRU算法需要将 1 这个节点移动到头结点,其余节点不变,如图所示。然后我们插入一个key=8节点,此时缓存容量到达上限,所以加入之前需要先删除数据。原创 2024-08-11 13:35:00 · 247 阅读 · 0 评论 -
【Android面试八股文】 聊聊你对SurfaceView和TextureView的理解
什么是无缓冲无缓冲:不用画布,直接在窗口上进行绘图叫做无缓冲绘图。什么是单缓冲单缓冲:用了一个画布,将所有内容都先画到画布上,在整体绘制到窗口上,就该叫做单缓冲绘图,那个画布就是一个缓冲区。什么是双缓冲双缓存:用了两个画布,一个进行临时的绘图,一个进行最终的绘图,这样就叫做双缓冲绘图。自身就实现了双缓冲,通俗来讲就是有两个缓冲区,一个后台缓冲区和一个前台缓冲区,每次后台缓冲区接受数据,当填充完整后交换给前台缓冲,这样就保证了前台缓冲里的数据都是完整的。双缓冲在更新视图时用到了两张。原创 2024-08-10 16:44:50 · 430 阅读 · 0 评论 -
【Android面试八股文】是否了解SurfaceView?它和View的区别是什么?GLSurfaceView又是什么?
什么是无缓冲无缓冲:不用画布,直接在窗口上进行绘图叫做无缓冲绘图。什么是单缓冲单缓冲:用了一个画布,将所有内容都先画到画布上,在整体绘制到窗口上,就该叫做单缓冲绘图,那个画布就是一个缓冲区。什么是双缓冲双缓存:用了两个画布,一个进行临时的绘图,一个进行最终的绘图,这样就叫做双缓冲绘图。自身就实现了双缓冲,通俗来讲就是有两个缓冲区,一个后台缓冲区和一个前台缓冲区,每次后台缓冲区接受数据,当填充完整后交换给前台缓冲,这样就保证了前台缓冲里的数据都是完整的。双缓冲在更新视图时用到了两张。原创 2024-08-10 16:28:16 · 255 阅读 · 0 评论 -
【Android面试八股文】你说你开发过IM通信SDK使用的编解码方案是TLV方案,能否展示说说你们怎么使用TLV编解码的?
Tips:每层嵌套都有2个或以上的字节增加(Tag和Length),一般通信双方可以按照协议对数据类型进行推定,所以大家可以根据实际需要,决定是否省略第三层的Tag和Length,即可通过配置文件或其它方式让程序了解字段的类型,从而降低数据包的大小,节省流量。描述Value部分所占字节的个数,编码格式分两类:定长方式(DefiniteForm)和不定长方式(IndefiniteForm),其中定长方式又包括短形式与长形式。这种方式使得可以在编码没有完全结束的情况下,可以先发送部分数据给对方。原创 2024-08-09 20:50:05 · 276 阅读 · 0 评论 -
【Android面试八股文】说一说Android开发模式之MVC、MVP、MVVM的区别?
MVC模式中,Activity同时承担了View和Controller的责任,代码相对简单,但可能导致Controller臃肿。MVP模式通过Presenter解耦了业务逻辑和视图,使得代码更易于维护和测试。MVVM模式使用ViewModel和LiveData实现了数据的双向绑定,代码更加简洁且易于测试,但引入了额外的复杂性。这三个模式各有优缺点,选择时应根据项目的需求来决定。原创 2024-08-09 20:05:56 · 339 阅读 · 0 评论 -
【我的OpenGL学习进阶之旅】讲一讲GL_TEXTURE_2D和GL_TEXTURE_EXTERNAL_OES的区别
提供了对标准2D图像的处理能力,可以存储静态的贴图图像或者帧缓冲区的渲染结果。其使用二维的纹理坐标系,通过将纹理坐标映射到纹理图像上的对应位置,可以实现纹理贴图、纹理过滤、纹理环绕等操作。纹理的特点使用二维纹理坐标系进行操作;使用函数加载纹理数据;通过纹理过滤和纹理环绕等方式进行纹理的采样和处理;是 OpenGL 中的一个纹理目标类型,用于表示二维纹理。纹理是图形处理中的重要元素,用于将图像映射到几何体表面,从而实现复杂的图形效果。原创 2024-07-25 22:30:12 · 682 阅读 · 1 评论 -
【Android面试八股文】1.使用了HTTPS就绝对安全了吗?2.HTTPS 会被抓包吗?3.如何避免被中间人抓取数据?
HTTPS是在 HTTP 的基础上加入加密层的协议,用于安全的数据传输。TCP 三次同步握手客户端验证服务器数字证书DH 算法协商对称加密算法的密钥、hash 算法的密钥SSL 安全加密隧道协商完成网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的 hash算法进行数据完整性保护,保证数据不被篡改。HTTPS 一定是安全的吗?用了HTTPS就安全了吗?HTTPS 会被抓包吗?网络面经:使用HTTPS就绝对安全了吗?原创 2024-07-16 01:16:46 · 817 阅读 · 0 评论 -
【Android面试八股文】1. 说一说Java四大引用有哪些? 2. 软引用和弱引用的区别是什么?
强引用是最常见的引用类型,它决定了对象的生命周期。软引用用来实现缓存,对内存敏感的对象,当内存不足时可以被回收。弱引用用来实现弱关联,当没有强引用指向对象时,即使有弱引用指向它,也可以被垃圾回收器回收。虚引用主要用来跟踪对象被回收的状态,在对象被回收时收到系统通知,用于执行一些必要的清理操作。这些引用类型提供了灵活的内存管理机制,可以根据实际需求选择合适的引用类型来优化程序的性能和内存使用。回收时机:软引用是在系统内存不足时才被回收,而弱引用则是在下一次垃圾回收时被回收。适用场景。原创 2024-07-15 23:17:41 · 1284 阅读 · 0 评论 -
【Android面试八股文】请描述一下 android 的系统架构?
Android 是一个基于 Linux 的开源软件堆栈,针对多种不同设备类型打造。下图显示了 Android 平台的主要组件。早期的Android架构如下图所示。原创 2024-07-14 23:16:13 · 921 阅读 · 0 评论 -
【Android面试八股文】Android 中如何捕获未捕获的异常?
在 Android 应用开发中,捕获未捕获的异常(Uncaught Exception)通常需要通过设置全局异常处理器来实现。这样可以在应用程序中的任何位置捕获到未被处理的异常,并进行相应的处理或记录。原创 2024-07-14 22:53:19 · 1431 阅读 · 0 评论 -
【Android面试八股文】你能说一说横竖屏切换时 Activity 的生命周期吗?
在 Android 应用程序中,当屏幕发生横竖屏切换时,Activity 的生命周期会经历一些变化,这对于开发者来说是很重要的,因为它涉及到如何处理 UI 和数据的变化。原创 2024-07-14 00:39:30 · 300 阅读 · 0 评论 -
【Android面试八股文】谈谈OkHttp框架的原理(深度剖析源码)
OkHttp是一个开源的网络请求框架,由Square公司开发和维护,用于在 Android 和 Java 应用中发送和接收HTTP请求。Google在Android4.4以后开始将源码中的底层实现替换为OKHttp,同时现在流行的Retrofit框架底层同样是使用OKHttp的。它提供了简单而强大的API,支持同步和异步请求,并在性能和可扩展性方面表现优秀。主要特性和优势:支持 HTTP/2 和 SPDY。原创 2024-07-13 23:25:56 · 847 阅读 · 0 评论 -
【Android面试八股文】在你之前的Android项目中,你是如何进行内存优化的?包括线下和线上如何监控?
内存问题是一个普遍问题,但是却普遍缺少关注度,具体有以下几个原因内存问题相对比较隐蔽,表现并不明显同时android使用Jvm语言开发,垃圾回收是自动的,所以一般没有特别关注内存问题难以定位,出现问题的地方往往只是表现的地方,真正的原因难以收集内存优化的内容其实非常多而复杂,我们可以尝试从以下思路去了解要了解内存问题,我们首先要了解为什么要做内存优化?同时需要了解一些内存优化的背景知识,如垃圾回收机制我们需要了解一些内存优化的常用工具与手段。原创 2024-07-13 20:25:25 · 278 阅读 · 0 评论 -
【Android面试八股文】项目中使用Glide框架出现内存溢出,应该是什么原因?
在使用 Glide 时,确保传递正确的上下文(Context),比如 Activity 或者 Fragment 的引用。即使 Glide 自身有内存缓存管理,但如果使用不当或者加载的图片过多过大,仍然可能会占用大量内存。:在使用 Glide 加载图片时,确保传递正确的上下文,避免在不合适的生命周期或上下文中加载图片。:确保只加载必要的图片,尽量避免一次性加载大量图片,可以通过分页加载或者滚动时加载来优化。:根据应用的需求配置 Glide 的内存缓存和磁盘缓存策略,避免内存占用过高。空白Fragment。原创 2024-07-13 18:32:50 · 288 阅读 · 0 评论