Android源码分析(三)-----系统框架设计思想

文章指出Android系统精髓在源码之外,不应仅从源码分析该系统。要站在设计者角度思考,如设计时需考虑AP开发者使用。框架设计依赖AndroidManifest.xml、反射机制和泛型,基于IOC,由基类控制对象创建。最后总结要从设计思考架构,从源码验证结论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 : 术在内而道在外

Android系统的精髓在源码之外,而不在源码之内,代码只是一种实现人类思想的工具,仅此而已......

近来发现很多关于Android文章都是以源码的方向入手分析Android这个系统,最终结果可想而知,甚是凄惨。正所谓自信满满的来,一脸懵逼的走。
想要真正了解Android系统,首先一定要站在更高的层次上做分析,以设计者的角度去思考。如果让你去设计Android系统,你会如何设计?而并不是把已经设计好的源码当做学习Android系统的切入点,源码只是让你进一步去验证自己的想法是否正确。Android Framework设计之初就必须要考虑系统诞生后,AP开发者该如何使用,怎么设计系统才会处于主导地位,占据主动权。

二 : 框架设计

框架是如何知道开发者后来撰写的应用子类的名称呢? 如果不知道应用子类的名称又如何创建应用子类的对象呢?
答案是:依赖AndroidManifest.xml文档。 java中的反射机制还有泛型。
image.png

任何系统的设计都是框架在先,AP开发者在后。Framework层框架的设计同样是早于AP开发者,所有的设计基本都是反向调用,基于IOC(控制反转),类似Spring框架的IOC/DI(控制反转/依赖注入),包括Activity的生命周期,setContentView(int layoutResId),startActivity(Intent , intent)等方法全部都是在Framework诞生时就已经定义完成。

源码路径:/frameworks/base/core/java/android/app/Activity.java

    /**
     * Set the activity content from a layout resource.  The resource will be
     * inflated, adding all top-level views to the activity.
     *
     * @param layoutResID Resource ID to be inflated.
     *
     * @see #setContentView(android.view.View)
     * @see #setContentView(android.view.View, android.view.ViewGroup.LayoutParams)
     */
    public void setContentView(@LayoutRes int layoutResID) {
        getWindow().setContentView(layoutResID);
        initWindowDecorActionBar();
    }

    /**
     * Set the activity content to an explicit view.  This view is placed
     * directly into the activity's view hierarchy.  It can itself be a complex
     * view hierarchy.  When calling this method, the layout parameters of the
     * specified view are ignored.  Both the width and the height of the view are
     * set by default to {@link ViewGroup.LayoutParams#MATCH_PARENT}. To use
     * your own layout parameters, invoke
     * {@link #setContentView(android.view.View, android.view.ViewGroup.LayoutParams)}
     * instead.
     *
     * @param view The desired content to display.
     *
     * @see #setContentView(int)
     * @see #setContentView(android.view.View, android.view.ViewGroup.LayoutParams)
     */
    public void setContentView(View view) {
        getWindow().setContentView(view);
        initWindowDecorActionBar();
    }

    /**
     * Set the activity content to an explicit view.  This view is placed
     * directly into the activity's view hierarchy.  It can itself be a complex
     * view hierarchy.
     *
     * @param view The desired content to display.
     * @param params Layout parameters for the view.
     *
     * @see #setContentView(android.view.View)
     * @see #setContentView(int)
     */
    public void setContentView(View view, ViewGroup.LayoutParams params) {
        getWindow().setContentView(view, params);
        initWindowDecorActionBar();
    }

Android中的对象由基类创建,基类主导一切的控制权,这样框架便占据了主导地位。在RunTime时刻根据Manifest文件回传相关数据。AP开发者同样也可以使用反射机制调用Framework的隐藏API。
image.png

三 : 总结
  1. Android的精髓在源码之外,而不在源码之内。
  2. 以设计者的角度去思考系统架构。
  3. 从源码中验证自己的结论。
  4. 多角度思考,重复验证。

喜欢源码分析系列可参考其他文章:
Android源码分析(一)-----如何快速掌握Android编译文件
Android源码分析(二)-----如何编译修改后的framework资源文件

转载于:https://www.cnblogs.com/ljx646566715/p/10893856.html

Android核心分析之一--------分析方法论探讨之设计意图..........................................1 Android核心分析之二-------方法论探讨之概念空间篇..............................................3 Android是什么之-------手机之硬件形态.....................................................................5 Android核心分析之四---手机的软件形态......................................................................6 Android核心分析之五-----基本空间划分....................................................................7 Android核心分析之六-----IPC框架分析Binder,Service,Servicemanager.....11 Android核心分析之七------Service深入分析..............................................................21 Android核心分析之八------Android 启动过程详解...................................................31 Android核心分析之九-------ZygoteService..................................................................36 Android核心分析之十-------AndroidGWES之基本原理篇.......................................40 Android核心分析之十一-------AndroidGWES之消息系统.......................................43 Android核心分析(12)-----AndroidGEWS窗口管理之基本架构原理......................48 Android核心分析(13)-----AndroidGWES之Android窗口管理...............................50 Android核心分析(14)------AndroidGWES之输入系统..........................................57 Android核心分析(15)--------Android输入系统之输入路径详解..............................59 Android核心分析(16)-----Android电话系统-概述篇...............................................66 Android核心分析(17)------电话系统之rilD............................................................69 Android核心分析(18)-----Android电话系统之RIL-Java........................................76 Android核心分析(19)----电话系统之GSMCallTacker.............................................84 Android核心分析(20)----Android应用程序框架之无边界设计意图.......................87 Android核心分析(21)----Android应用框架AndroidApplication.......................88 Android核心分析(22)-----Android应用框架之Activity..........................................93 Android核心分析(24)-----AndroidGDI之显示缓冲管理.........................................104 Android核心分析(25)------AndroidGDI之共享缓冲区机制................................112 Android核心分析(26)-----AndroidGDI之SurfaceFlinger.....................................116 Android核心分析(27)-----AndroidGDI之SurfaceFlinger之动态结构示意图..123 Android核心分析(28)-----AndroidGDI之Surface&Canvas..................................126
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值