
Android进阶专栏
文章平均质量分 94
对Android深入底层的剖析
helson赵子健
这个作者很懒,什么都没留下…
展开
-
内存优化之掌握 APP 运行时的内存模型
我们已经从操作系统的维度了解了一个进程的内存模型。这一节,我们将维度继续上升,从应用层出发看看一个 App 运行时的内存模型是怎样的。为了让大家深入掌握 App 运行时的内存模型,这一节的内容按照由外到内、逐步深入的原则,分为了 3 个部分:内存描述指标内存数据获取内存模型详解话不多说,让我们马上开始这一章学习吧!原创 2022-12-10 16:44:36 · 1104 阅读 · 0 评论 -
内存优化之重新认识内存
我们知道,手机的内存是有限的,如果应用内存占用过大,轻则引起卡顿,重则导致应用崩溃或被系统强制杀掉,更严重的情况下会影响应用的留存率。因此,内存优化是性能优化中非常重要的一部分。但是,很多开发者对内存的认识还停留在应用开发这一层,平时只是参考网上的方案,对内存进行比较浅显的优化。想要深入进行内存优化,我们需要从操作系统的层面了解内存是怎么管理的,又是如何被使用的。可能会有人疑问:“为什么做个内存优化需要从操作系统层了解内存呢?”我们确实可以在网上搜到很多内存优化的文章,但它们都是从上层应用出发进行优化的,而原创 2022-12-04 18:17:19 · 858 阅读 · 0 评论 -
Android性能优化方法论
对于接触性能优化经验较少的开发者来说,可能很少有机会能去总结或者学到这些成熟的套路,方法论,或者框架。所以作为一位多年长期做性能优化的开发者,在这篇文章中对性能优化的方法论做一些总结,以供大家借鉴。原创 2022-11-24 15:55:38 · 1605 阅读 · 0 评论 -
从零开始学Android架构(一)——什么是设计模式?
前言不少人会觉得架构师是一个高大上的岗位,只有技术顶尖的人才能胜任,但其实它并没有这么高大上,大部分的架构师,都只是开发经验非常丰富,并且热爱学习,善于知识迁移和总结。应用的架构是一件非常成熟,有非常多的经验提供我们借鉴的事情,我们可以从Android的架构中学习大型项目的架构思路,我们也可以从Android的局部中学习框架的精髓,如binder的设计,framework的设计,我们也可以深入到Android的代码细节中去看看具体的实现,看看什么样的场景使用什么的设计模式,如何写出更优雅的代码。除了And原创 2021-01-09 19:37:04 · 621 阅读 · 0 评论 -
深入掌握Binder原理(下)
前言在前一篇文章《深入掌握Binder原理(上)》中,我们已经了解了Binder的架构以及Binder的组成部分,并且深入的了解了Binder驱动程序以及ServiceManager的原理,在这篇文章中,会对Binder剩下两部分Client和Server进行讲解,这里建议没有阅读上一篇文章的先读完上一篇文章,然后再来看这一篇,只有这两篇文章连起来,才能对Binder的体系有一个完整和深入的了解。Binder实现原理为了能更具体的理解Binder中Client和Server这两个组成部分,这里我以我们原创 2020-11-29 00:20:44 · 631 阅读 · 0 评论 -
深入掌握Binder原理(上)
前言为什么要了解Binder的原理呢,会用不就可以了吗?深入了解Binder不仅仅是为了了解Binder的通信方式,而是从Binder设计中去学习一种优秀的架构思想和问题的解决思路。当我们遇到复杂的通信场景时,或者在一个新的平台上,需要一种新的通信方式提高安全或者效率性能等问题时,我们可以从Binder的设计中借鉴灵感。架构师的成长之路,就是不断的从优秀的设计中学习经验和解决方案。所以,作为一个有追求的程序员,开始对Binder的深入了解吧。网上介绍Binder的文章非常多,我为什么还要再写呢?主要是因为原创 2020-11-08 17:17:05 · 855 阅读 · 1 评论 -
掌握Android和Java线程原理
前言掌握多线程的使用,是程序员进阶必须掌握的技能之一,为什么多线程这么重要?因为多线程能更充分的发挥出cpu的性能,是我们在开发中提高程序性能最重要并且最有效的一种方式。怎么才能掌握多线程的使用?只有彻底掌握线程的基础知识,才能用好线程。什么是线程?为什么会产生线程安全问题?如何保证线程安全?如何提升多线程的性能?这些都是线程很重要的基础知识。在这篇文章中,我会针对线程的基础知识,进行一个全面并且深入的讲解。那么,我们开始对线程的学习吧。线程原理线程是什么呢?它是操作系统能够进行运算调度的最小单位,原创 2020-10-18 23:12:07 · 867 阅读 · 2 评论 -
掌握Android图像显示原理(下)
前言前面两篇文章介绍了图像生产者和图像消费者,终于到了最后一篇——图像缓冲区,这三者一起构成了一个完整的Android图像显示系统。Android中的图像生产者OpenGL,Skia,Vulkan将绘制的数据存放在图像缓冲区中,Android中的图像消费SurfaceFlinger从图像缓冲区将数据取出,进行加工及合成。那么图像缓冲区是什么呢?它是如何创建出来的呢?又要如何使用它呢?它的存储原理是什么呢?读完这篇文章,你就能回答这些问题了。图像缓冲区在讲解图像的生产者时,多次提到了Surface,我们原创 2020-10-03 17:48:08 · 2818 阅读 · 2 评论 -
掌握Android图像显示原理(中)
前言在上一篇文章《Android图形渲染原理(上)》中,详细的讲解了图像消费者,我们已经了解了Android中的图像元数据是如何被SurfaceFlinger,HWComposer或者OpenGL ES消费的,那么,图像元数据又是怎么生成的呢?这一篇文章就来详细介绍Android中的图像生产者——SKIA,OPenGL ES,Vulkan,他们是Android中最重要的三支画笔。图像生产者OpenGL ES什么是OpenGL呢?OpenGL是一套图像编程接口,对于开发者来说,其实就是一套C语言编写原创 2020-09-19 02:09:12 · 4368 阅读 · 0 评论 -
掌握Android图像显示原理(上)
我们所知道的Activity或者是应用App界面的显示,只属于Android图形显示的一部分。同样可以在Android系统上展示图像的WebView,Flutter,或者是通过Unity开发的3D游戏,他们的界面又是如何被绘制和显现出来的呢?他们和我们所熟悉的Acitvity的界面显示又有什么异同点呢?我们可以不借助Activity的setView或者InflateView机制来实现在屏幕上显示出我们想要的界面吗?Android系统显示界面的方式又和IOS,或者Windows等系统有什么区别呢?原创 2020-09-06 18:52:51 · 7954 阅读 · 6 评论 -
深入理解Android进程间通信机制
通信是Android开发必不可少的一部分,不管是我们做应用App开发,还是Android系统,都使用了大量的通信。通信又分为进程间通信和进程内通信,在这篇文章,我主要深入讲解Android系统所涉及到的所有进程间通信方式。Android系统中有大量IPC(进程间通信)的场景,比如我们想要创建一个新的进程,需要通过Socket这种IPC方式去让Zygote Fork新进程;如果我们要杀掉一个进程,需要通过信号这种IPC方式去将SIGNAL_KILL信号传递到系统内核;如果我们想要唤醒主线程处于休眠中的Lo原创 2020-08-29 09:34:31 · 2287 阅读 · 0 评论 -
掌握Java和Android虚拟机
我们知道的虚拟机有很多,运行Java的JVM虚拟机,运行Android程序的Davlik和Art虚拟机,运行C#的CLR虚拟机,那么什么是虚拟机呢,虚拟机的作用又是什么呢?运行JavaScript的v8引擎或者运行Python的引擎是否也是虚拟机呢?带着这几个问题,我们开始对虚拟机的学习。虽然现在很多人都认为运行JavaScript的V8或运行Python的VirtualEnv,都不是虚拟机,而是解释器,主要原因是因为V8或者VirtualEnv不仅仅能执行字节码文件,还能将源文件编译成字节码文件,而传原创 2020-08-15 23:24:19 · 2087 阅读 · 0 评论 -
Android客户端如何设计架构
当我们在新开发一款APP时,我们在初期要如何设计架构呢?在这里我根据我的经验,总结了一些基本的架构思路。客户端架构设计的时候,首先需要充分考虑到所开发的app的类型,这里我分为功能型和服务型两大类,功能型的app侧重业务和功能,服务型的app侧重服务和运算。下面我就具体来讲讲针对这两种类型的通用架构。功能型app功能型app的activity比较多,整个app都以一个个activity承载业务和功能,在设计这类app时,我们需要考虑哪些要素呢?由于activity比较多,我们需要考虑页面的跳转路由,原创 2020-05-16 14:49:47 · 1378 阅读 · 1 评论