Android源码分析(三)-----系统框架设计思想
2018-02-02 11:14
573 查看
一 : 术在内而道在外
Android系统的精髓在源码之外,而不在源码之内,代码只是一种实现人类思想的工具,仅此而已……近来发现很多关于Android文章都是以源码的方向入手分析Android这个系统,最终结果可想而知,甚是凄惨。正所谓自信满满的来,一脸懵逼的走。
想要真正了解Android系统,首先一定要站在更高的层次上做分析,以设计者的角度去思考。如果让你去设计Android系统,你会如何设计?而并不是把已经设计好的源码当做学习Android系统的切入点,源码只是让你进一步去验证自己的想法是否正确。Android Framework设计之初就必须要考虑系统诞生后,AP开发者该如何使用,怎么设计系统才会处于主导地位,占据主动权。
二 : 框架设计
框架是如何知道开发者后来撰写的应用子类的名称呢? 如果不知道应用子类的名称又如何创建应用子类的对象呢?答案是:依赖AndroidManifest.xml文档。 java中的反射机制还有泛型。
任何系统的设计都是框架在先,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。
三 : 总结
Android的精髓在源码之外,而不在源码之内。以设计者的角度去思考系统架构。
从源码中验证自己的结论。
多角度思考,重复验证。
喜欢源码分析系列可参考其他文章:
Android源码分析(一)—–如何快速掌握Android编译文件
Android源码分析(二)—–如何编译修改后的framework资源文件
相关文章推荐
- 求 架构设计 的视屏和 设计模式的视频 性能优化 的视频 系统源码分析 的视频 android
- Android源码分析(五)-----如何从架构师的角度去设计Framework框架
- 【oschina android源码分析】便笺系统的设计
- android adb 源码框架分析(1 系统)【转】
- android adb 源码框架分析(1 系统)
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android wifi设计原理(源码分析)
- Android核心分析(20)----Android应用程序框架之无边界设计意图
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- 【转】Android系统原理与源码分析:利用Java反射技术阻止通过按钮关闭对话框
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android核心分析(20)----Android应用程序框架之无边界设计意图
- 【北京讲座】Android系统Framework层源码分析
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- 【北京讲座】Android系统Framework层源码分析(2011.09.24)
- ANDROID移植: WIFI设计原理(源码分析
- Android系统原理与源码分析
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- ANDROID移植: WIFI设计原理(源码分析
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框