![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Framework
文章平均质量分 93
普通网友
这个作者很懒,什么都没留下…
展开
-
Android源码分析 - Service启动流程
Service的整个启动流程到这里基本上都分析完了,至于Service的停止,重建等流程,我将会在后面的文章中再慢慢分析。原创 2023-11-17 15:19:39 · 293 阅读 · 0 评论 -
面试 | 再也不怕被问 Binder 机制了
Binder 机制是 Android 特有的一种进程间通信(IPC)方式。原创 2023-11-13 16:22:38 · 355 阅读 · 0 评论 -
[Framework] Android Handler 工作原理
在 Android Framework 中有两个主要的主线程Handler,一个是中的H,它主要来处理四大组建的各种生命周期;还有一个是中的,它主要负责绘制,动画,输入等操作。这两个Handler负责的工作和用户体验都极为密切,主线程也可以说非常忙。在项目中我经常发现很多的代码都会在主线程执行,明明有的操作不需要主线程执行。原创 2023-11-09 15:44:08 · 193 阅读 · 0 评论 -
劝学:Android 14 Framework 引入了哪些“新”技术栈
写到这里,我想回到本文的标题,细心的读者会发现,我给”新技术栈的”新“字打了引号,为什么?因为对于那些关注技术发展,同时在 Android 应用层和框架层之间工作的同学来讲,这些其实早就不是新技术了,有些甚至可以说是应用层”玩剩下的“。为什么这些技术时至今日才被引入 Android 框架?我想无外乎还是为了追求稳定,就像当年 Kotlin 也是在社区,在 App 开发层火了好多年,Google 后面才参与进来,并最终引入框架一样,很多东西的可行性和稳定性也需要时间去验证。原创 2023-11-07 21:47:26 · 846 阅读 · 1 评论 -
Android 应用流量监控实践
在Java层, 创建Socket的方式是直接构造 java.net.Socket对象,我们先跟踪其构造函数的实现。在构造函数中,会调用setImpl()函数,继续跟踪setImple()实现setImpl()函数先判断 factory是否为空,如果不为空则 使用factory创建SocketImpl实例,否则直接通过 SocksSocketImple()构造函数创建。原创 2023-11-06 21:44:46 · 1222 阅读 · 0 评论 -
Zygote进程通信为什么用Socket而不是Binder?
Zygote进程是Android系统中的一个特殊进程,它在系统启动时被创建,并负责孵化其他应用进程。它的主要作用是预加载常用的系统类和资源,以提高应用启动的速度。在Android系统中,每个应用都运行在独立的进程中,这样可以保证应用之间的隔离性。然而,创建新进程需要消耗一定的时间和资源。为了减少应用启动的时间,Android引入了Zygote进程。Zygote进程在系统启动时会先加载一些常用的系统类和资源,然后通过fork()系统调用创建新的应用进程。原创 2023-11-03 17:46:34 · 562 阅读 · 0 评论 -
自动跳过APP启动页广告
在具体的代码实现中已经做了很多优化工作,不会影响APP正常使用,也不会导致耗电增多或导致系统卡顿之类的问题,完全可以放心使用。为了防止我们的广告服务被系统杀死,可以设置我们的APP为系统白名单或者允许后台运行等一系列保活方法让它多活一会吧。为了帮助到大家更好的全面清晰的掌握好启动优化,准备了性能优化相关的核心笔记(包含了启动优化、内存优化、网络优化……原创 2023-10-25 15:44:17 · 262 阅读 · 0 评论 -
关于Fragment的生命周期,你知道多少?
Fragment是一种可以嵌入到Activity中的模块化UI组件,它可以在一个Activity中承载多个Fragment,并且可以在不同的Activity之间共享。Fragment与Activity之间的关联关系是通过FragmentManager和FragmentTransaction进行管理的,同时也可以通过Fragment的生命周期回调方法和通信机制实现二者之间的交互。这四个方法是与Activity的生命周期相对应的,可以在这些方法中进行与Activity交互的操作。原创 2023-10-24 17:00:30 · 875 阅读 · 0 评论 -
深度剖析Android Binder IPC机制
Binder是Android系统中的IPC机制,它允许不同进程之间进行高效、安全的通信。Binder基于客户端-服务器模型,其中一个进程充当服务器,另一个进程充当客户端。客户端可以获取服务器进程提供的Binder对象引用,通过该引用调用服务器进程的方法。下面是Binder的基本工作原理:1.Binder对象:Binder通信的基本单元是IBinder接口,所有Binder对象都实现了这个接口。在系统内核层,Binder对象是以C/C++结构体的形式存在的,其中包括引用计数和标识符等信息。原创 2023-10-20 14:00:00 · 278 阅读 · 0 评论 -
Android性能优化系列-腾讯matrix-流量监控之TrafficPlugin源码分析
流量监控的实现方式是通过hook c++层socket的发起和接收相关的方法,拦截到对应方法从而对过程中涉及到的流量信息进行采集,采集到的数据就可以实时的获取到,以做进一步的分析。原创 2023-10-18 13:00:00 · 396 阅读 · 0 评论 -
Android渲染系列之原理概述篇
渲染离不开屏幕,Android中的屏幕碎片化比较严重,尺寸大小不一,材质也是屏幕重要的因素。目前智能手机主流的屏幕可分为两大类即液晶显示器;原创 2023-10-13 14:00:00 · 680 阅读 · 0 评论 -
Android斩首行动——应用层开发Framework必知必会
继承View这种类型常见于要绘制一些不规则的图形,需要重写它的onDraw方法。需要的注意的是,View的Padding属性在绘制过程中默认是不起作用的,如果要使Padding属性起作用,就需要自己在onDraw中获取Padding后绘制。另外,onMeasure时需要考虑wrap_content和padding的情况,上文也有提到过。继承ViewGroup这种类型比较少,一般用于实现自定义的布局。那就意味着要自定义布局规则,也就是自定义onMeasureonLayout。在onMeasure。原创 2023-10-11 11:30:00 · 264 阅读 · 0 评论 -
面试中常聊 AMS,你是否又真的了解?
每当这时候,内心真是一万只草泥马奔腾而过……大部分Android开发者一遇到这种面试题就直接懵逼了,不少人不是没有看过相关的解答,但也都只是浅尝辄止,没有深入掌握其中原理,面试的时候自然会被问个措手不及。下面这张图想必大家都看过,Google官方提供过一张经典的四层架构图,从下往上依次分为:Linux内核、系统库和Android运行时环境、框架层、应用层,其中每一层都包含大量的子模块或子系统。其中,),四大组件的启动、各个生命周期方法的调用基本都需要通过它来处理,所以它涉及到的知识点也非常多。。原创 2023-10-10 14:30:00 · 118 阅读 · 0 评论 -
Android 视图动画与属性动画的区别
可以看到,我们上面的几乎的所有写法都是基于addUpdateListener,然后去改变view的属性。所以说,限制我们的全是想象力。这个动画只要view属性支持,我们就可以整出各种花样来。我们在视图动画里面,知道Android 系统给我们提供了很多插值器。哪些插值器,在属性动画中同样可用。默认的插值器是LinearInterpolator。可以看懂LinearInterpolator 继承于BaseInterpolator。最终可以看到都是继承于TimeInterpolator,而这个接口只有一个函数。原创 2023-10-07 13:59:46 · 210 阅读 · 0 评论 -
[Framework] Android Binder 工作原理
Binder是Android系统中主要的IPC通信方式,其性能非常优异。但是包括我在内的很多开发者都对它望而却步,确实比较难,每次都是看了忘,忘了看,但是随着工作的时间约来越长,每次看也都对Binder有新的认识,所以这次把自己的一些认识记录一下。原创 2023-09-28 13:32:52 · 292 阅读 · 0 评论 -
Android 内存泄漏分析思路和案例剖析
内存泄漏是指 Android 进程中,某些对象已经不再使用,但被一些生命周期更长的对象引用,导致其占用的内存资源无法被GC回收,内存占用不断增加的一种现象;方法,可以看到这个本地方法把我们的 Activity 传进去了,后续处理不得而知,但基于上面的内存分析我们基本可以断定,正是由于这个方法,Activity 的引用被 Native 的长生命周期对象持有,导致 Activity 出现内存泄漏。但有两个疑问,一是这个内部类是写在方法里的,方法结束时,不会把方法栈中的内部类引用清除掉吗?原创 2023-09-27 16:10:48 · 482 阅读 · 0 评论 -
【Android性能优化】:ProGuard,混淆,R8优化
文章主要讲解了关于R8编译器在整个编译过程中对apk代码以及资源的一些优化操作,主要集中在代码缩减,资源缩减,代码混淆,代码优化这几部分,其中对代码混淆做了一个比较全面的分析。原创 2023-09-25 15:50:37 · 389 阅读 · 0 评论 -
Android内存优化内存抖动的解决实战
假设我们有一个应用,它的功能是在一个TextView上显示一个计数器,每隔一秒钟就更新一次计数器的值。为了实现这个功能,我们使用了一个Handler来发送空消息,并在接收到消息时更新计数器的值,并再次发送空消息,形成一个循环。同时,为了模拟一些复杂的业务逻辑,我们在循环中创建了大量的数组对象。这段代码看起来没有什么问题,但是当我们运行这个应用时,我们会发现应用的内存使用情况非常不稳定,内存曲线呈现出明显的锯齿状,GC事件也非常频繁。这就是典型的内存抖动的现象。原创 2023-09-24 17:38:15 · 223 阅读 · 0 评论 -
Android内存优化内存抖动的概念和危害
内存抖动是指内存频繁分配和回收导致的不稳定现象。在Java中,内存分配和回收是由垃圾回收器(GC)来管理的。GC会定期扫描内存中的对象,判断哪些对象是无用的,然后释放它们占用的空间。这个过程称为垃圾回收(GC)。GC是一种有益的机制,它可以避免内存泄漏,提高内存利用率。但是,如果GC过于频繁或者耗时过长,就会影响应用的运行效率。当GC发生时,应用的线程会被暂停,等待GC完成后才能继续执行。这个过程称为GC停顿(GC Pause)。原创 2023-09-23 18:18:03 · 370 阅读 · 0 评论 -
面试常谈的Binder理解,每个人都不一样~
面试官提了一个问题,我们来看看 😎、😨 和 🤔️ 三位同学的表现如何吧😎 自认为无所不知,水平已达应用开发天花板,目前月薪 10k️:谈谈你对 binder 的理解😎:binder 是用来跨进程通信的,可以分为 client、server、binder 驱动以及 service manager 四部分。:一次拷贝原理知道吗?😎:不太清楚,其实对应用开发来说,没必要知道的。:好的,回去等通知吧😨 业余时间经常打游戏、追剧、熬夜,目前月薪 15k:谈谈你对 binder 的理解。原创 2023-09-20 16:32:38 · 88 阅读 · 0 评论 -
Android性能优化深入解析,将你的APP优化到极致的操作~
作为一个Android程序员,性能优化是无法避开的事情,并且性能优化也是Android中最有挑战的工作之一,性能问题和Bug不同,后者的分析和解决思路更清晰,很多时候从应用日志即可直接找到问题根源,而性能问题,其排查思路更为复杂一些。对App进行性能优化,**是一个系统性的工程,对工程师的技术广度和技术深度都有所要求。**一个简单的应用,它不仅包含了应用代码本身,还和虚拟机、存储、网络等紧密相关,线上应用一旦出现了性能问题,需要我们从多方面去考虑。原创 2023-09-07 21:21:39 · 167 阅读 · 0 评论 -
面试问Handler内存泄露的场景,别就只知道静态内部类&弱引用!
我们在编码的过程中,如果出现疏忽或错误,造成程序未能释放已经不再使用的内存,就会导致内存泄露,随着泄露内存的增长,最终一定会导致 OOM。在 JVM 中,对对象的回收 GC 是基于。简单来说,就是从 GC Root 出发,被引用的对象均被标记为存活,而没有被引用的对象,则被标记为垃圾,即可以被 GC 回收。那么如果出现内存泄露,可以理解为就是一个长生命周期的对象,引用了短生命周期的对象,导致短生命周期的对象,在生命周期结束后,仍然得不到回收,最终导致内存泄露。原创 2023-09-05 21:15:17 · 174 阅读 · 0 评论 -
盘点 Handler 的经典十几连问
……原创 2023-09-01 14:39:28 · 121 阅读 · 0 评论 -
遇到 Binder这些面试题,你会怎么答?
作为开发人员,每个人都有每个人擅长领域,自然也有自己不擅长的领域,很难成为完美的一个全栈开发。在面试中最怕遇见的一件事是面试官专挑你不擅长的领域进行提问,目的就是看你遇到问题的应变能力。接下给大家分享一个面试中容易被问道知识点:“”,这个问题虽有些 “面试造火箭” 的无奈,可难点也是亮点、体现价值所在,是筛选面试者有效手段。如果让你回答,你能说出多少呢?我们来分别来看看A、B、C三位同学的回答如何吧!:说说你对 binder 驱动的了解。原创 2023-08-30 22:13:23 · 198 阅读 · 0 评论 -
Android-关于页面卡顿的排查工具与监测方案
关于卡顿这件事已经是老生常谈了,卡顿对于用户来说是敏感的,容易被用户直接感受到的。那么究其原因,卡顿该如何定义,对于卡顿的发生该如何排查问题,当线上用户卡顿时,在线下无法复现时,又如何获取信息来定位问题?一般来说, 12FPS (每秒显示帧数)为最低标准,低于 12fps 画面基本上就不是连续的,而当大于 60FPS 时,人眼很难区分出来明显的变化,所以 60FPS 是衡量一个界面流畅程度的重要指标。但 FPS 低并不意味着卡顿发生,而卡顿发生 FPS 一定不高,而是以一段时间内的掉帧程度来衡量的。原创 2023-08-30 14:39:57 · 1185 阅读 · 0 评论 -
浅谈 Android Binder 监控方案
在 Android 应用开发中,Binder 可以说是使用最为普遍的 IPC 机制了。考虑只监控某些个系统服务的情况,得益于 ServiceManager 和 AIDL 的设计,我们可以简单基于动态代理替换当前进程对应的 Proxy 对象来实现监控;而要实现进程内全局 Binder 监控的话,我们需要考虑怎么拦截到 Binder 调用通用的 transact 方法。原创 2023-08-29 20:45:48 · 754 阅读 · 0 评论 -
Android | 关于 OOM 的那些事儿
Android 系统对每个app都会有一个最大的内存限制,如果超出这个限制,就会抛出 OOM,也就是Out Of Memory。本质上是抛出的一个异常,一般是在内存超出限制之后抛出的。最为常见的 OOM 就是内存泄露(大量的对象无法被释放)导致的 OOM,或者说是需要的内存大小大于可分配的内存大小,例如加载一张非常大的图片,就可能出现 OOM。原创 2023-08-24 15:14:38 · 370 阅读 · 0 评论 -
揭开Android系统启动的神秘面纱
当有人问我们android中app启动流程的时候,我们总是会提到zygote。but,zygote又是从何而来?由此问题我想到了android系统的启动流程,zygote肯定是在系统初始化时创建的一个进程。带着这个疑问我去查询了一些android系统启动流程的资料及代码,下面是一张启动流程的简图,接下来我们会分析每一步做了什么,当我们按下android手机电源键后,“Bootcode”(bootloader引导代码)将会从一个被硬编码的位置读取并开始执行。这段程序执行的主要目的是将代码载入内存并执行。原创 2023-08-23 20:56:43 · 118 阅读 · 0 评论 -
Android事件分发机制被我翻烂了
这次说下Android中的事件分发机制 从开始点击屏幕开始,就会产生从Activity开始到decorview一直到最里层的view一连串事件传递。每一层view或者viewgroup都会首先调用它的dispatchTouchEvent方法,然后判断是否就在当前一层消费掉事件。原创 2023-08-21 16:19:40 · 192 阅读 · 0 评论 -
Android那两个你碰不到但是很重要的类之ViewRootImpl
这两个类就是ActivityThread和ViewRootImpl,之所以说碰不到是因为我们无法通过正常的方式引用这两个类或者其类的对象,调用方法或者直接拿他的属性。但他们其实又无处不在,应用开发中很多时候都和他们息息相关,阅读他们掌握其内部实现对我们理解Android运行机理有醍醐灌顶之疗效,码读百变其义自见,常读常新。本文就尝试从几个我们经常接触的方面先谈谈ViewRootImpl。原创 2023-08-18 21:03:21 · 174 阅读 · 0 评论 -
写给 Android 应用工程师的 Binder 原理剖析
这篇文章我酝酿了很久,参考了很多学习文档,读了很多源码,却依旧不敢下笔。生怕自己理解上还有偏差,对大家造成误解,贻笑大方。又怕自己理解不够透彻,无法用清晰直白的文字准确的表达出 Binder 的设计精髓。直到今天提笔写作时还依旧战战兢兢。Binder 之复杂远远不是一篇文章就能说清楚的,本文想站在一个更高的维度来俯瞰 Binder 的设计,最终帮助大家形成一个完整的概念。对于应用层开发的同学来说,理解到本文这个程度也就差不多了。简单介绍下什么是 Binder。原创 2023-08-11 20:49:40 · 1018 阅读 · 0 评论 -
从LeakCanary看Service生命周期监控
大家都知道使用LeakCanary可以监控项目中存在的,那么LeakCanary是怎么实现的呢?LeakCanary通过检测程序中对象的引用关系,收集应该被回收的对象并标记,随后等待GC后,检查该对象是否按预期回收即可,目前LeakCanary支持Service,Activity,Fragment,ViewModel以及View的泄漏检测,接下来我们一起来看下Service的关联部分。首先,我们考虑如果要认定一个Service对象可以被回收,前提条件是什么?原创 2023-08-09 14:06:43 · 296 阅读 · 0 评论 -
面试前期需静心,休得浮躁(Android 开发必看)~
有许多Android开发者面试时,总有被一些题难住,事后就吐槽面试官问的题很变态。其实我个人认为是每个人对基础知识掌握的程度不同,有些题可能你觉得难,但别人可以轻易的答出,有些你答的出,别人不一定答的出,所以我们需要深入的把基础给打牢固。今天这篇文章是来自一位很资深的前辈对于Android基础面试题目所做的总结归纳,一共有100+ 题目,知识面很广,而且对于每个问题都整理出了答案,不过因为篇幅太长,这里只放上面试题目,答案都整理好了一个文档,大家可以一起探讨!!!原创 2023-08-08 20:57:15 · 118 阅读 · 0 评论 -
Framework才是Android 开发的热门技术~
这种情况并不是说市场落寞了,不招人了,而是经过了近几期的一些互联网大厂的人才输出所造成的,从而提升了市场人才的平均质量,也提升了市场的竞争力。所以这也是那些,在HR的第一关就可能被刷掉了。除此之外,还有部分公司会对学历和背景进行适当的放宽,而他们主要看的是你的一些。所以首先做一份优质的简历来提升自己的面试邀约率,这个关键的第一步,也是最简单的一步,可以去网上找一些优质简历的模板进行套用即可。最难的一步则是。原创 2023-08-07 20:28:50 · 106 阅读 · 0 评论 -
Android 性能调优之bitmap的优化
一个像素的所占用的字节数计算的,宽高没变,在内存中占用的大小自然不会变,质量压缩的原理是通过改变图片的位深和透明度来减小图片占用的磁盘空间大小,所以不适合作为缩略图,可以用于想保持图片质量的同时减小图片所占用的磁盘空间大小。质量压缩并不会改变图片在内存中的大小,仅仅会减小图片所占用的磁盘空间的大小,因为质量压缩不会改变图片的分辨率,而图片在内存中的大小是根据width。inSampleSize只能设置为2的平方,不是2的平方则最终会减小到最近的2的平方数,如设置7会按4进行压缩,设置15会按8进行压缩。原创 2023-08-03 21:47:20 · 678 阅读 · 0 评论 -
使用aidegen导入AOSP工程到Clion并配置toolchains
aidegen是AOSP中自带的一个工具,可以将源码中的某个工程导入进IDE,从而可以使用IDE的智能提示,提高编码效率。而源码中的工程并不是独立存在的,还会依赖其他工程中的各种模块,aidegen 会主动把对应的模块编译一遍,同时把这些依赖都整理好导入到IDE中,从而避免因为找不到依赖而爆红的问题。原创 2023-08-03 14:51:48 · 352 阅读 · 0 评论 -
AndroidStudio查看AOSP的两种方法
本篇文章主要分享一些自己平时工作中使用AndroidStudio查看aosp的方法,同时抛砖引玉,希望知道其它便利有效的查看调试方式技巧的大佬们能够不吝赐教,大家互相分享,共同进步。如果直接用AndroidStudio打开aosp根目录,那么打开任意一个Java类,默认情况可能是这样的:Java文件的标签页显示图标为,表示“Java class located out of the source root”,并且其内部的成员变量之类的也没有被语法高亮。原创 2023-08-02 15:16:54 · 668 阅读 · 1 评论 -
Framework开发的热度从未下降~
*常年的应用层开发经验使自身对于系统源码Binder,Handler,AMS,WMS,PKMS这些东西仅仅只是简单听过或者简单接触,并未有过深入了解。这就直接导致了入门难,迷茫,从而面临被淘汰的风险。但这些任务都需要开发者深入了解Framework的内部机制和底层代码,并且需要有系统级的权限才能完成。,面对此数据,我们能想到的是实际的失业人数肯定会比公布的数据要多很多,尤其是表示。反观有一批Android开发在如此悲观的环境下站稳了跟脚,那就是。近几日,统计局也发布了就业相关数据,原创 2023-08-01 20:23:27 · 193 阅读 · 0 评论 -
面试中常聊 AMS,你是否又真的了解?
当我们深刻了解Android启动流程与AMS特性之后,就可以解决项目开发中的很多问题,比如:屏幕适配、自定义View和ViewGroup、APK加固、热修复、组件化路由、皮肤换肤、插件化、leakCanary内存问题分析、Hilt注入、Jetpack原理、Glide原理、RXJava原理、launch_mode、权限验证、四大组件等相关逻辑和代码……同时,系统的整体运行过程就成为了大厂面试的重灾区。),四大组件的启动、各个生命周期方法的调用基本都需要通过它来处理,所以它涉及到的知识点也非常多。原创 2023-07-31 22:11:05 · 157 阅读 · 0 评论 -
转行车载做开发,首先得掌握好Android Framework~
在当今社会,科技的快速发展推动了各行各业的变革。移动设备作为人们生活、工作、学习的重要工具,其市场份额逐年攀升。Android作为全球最受欢迎的移动操作系统之一,为开发者提供了广阔的发展空间。但是现在Android发展比较尴尬,之前想吃它红利的人群太多,加快了行业内卷的部分,致使现在Android人才市场饱,甚至可以说是溢出,岗位需求量已基本固定了,导致了如今工作难找的局面。在我身边就有不少这样的朋友,因层层原因几个月了都找不到Android 开发的工作。原创 2023-07-29 21:46:13 · 264 阅读 · 0 评论