androidframework学习
⑴ framework初了解与必备技能
E:Engine发动机,I:Interface接口,T:tire轮胎。有发动机和轮胎,再提供接口接口就可以让汽车跑起来。没有简单,我们就无法理解复杂;
application framework(应用框架层):无论是android提供的应用程序,还是开发人员自己编写的应用程序,都需要使用framework,核心的作用就是提供一个接口,给app跑起来,并且起到了屏蔽解耦作用。
简而言之,Framework具体的工作也就是为android应用开发的开发人员提供了一系列的服务和API的接口。同时负责应用程序生命周期和资源等进行管理。是android系统层内容。
framework是google厂商定制好了,最多修改一些bug或者添加一些东西,如果大改,很多应用就跑不起来。
Framework又分为java Framework和Native Framewok:示意图如下:
csdn一篇博客通俗易懂的讲了framework: 我眼中的Android Framework
Framework是由多个系统服务共同组成。所有服务都寄宿在系统核心进程中,在运行时每个服务都占据一个独立的线程。
为了实现Java程序在运行阶段的二次编译,Android为他们提供了运行时(Runtime)的支撑。
运行时由Java核心类库和Java虚拟机Dalvik共同构成 。
Java核心类库涵盖了Android框架层和应用层所要用到的基础java库。dalvik负责动态解析执行应用、分配空间、管理对象生命周期等工作,是android心脏。
硬件抽象层(HAL):是安卓为厂商定义的一套接口标准,为框架层提供接口函数。
Binder IPC驱动:Android的一个特殊的驱动程序,具有单独的设备节点,提供进程间通讯的功能。
⑵ Framework应用框架为什么重要呢
对于绝大多数 Android 开发工程师来说,掌握Android Framework 一直是一个不光要熟练而且必须要精通的技能。Framework这个应用框架是Android开发中最基础,但同时也是最重要的。Framework包含了Android IPC Binder机制、Handler消息机制、Dalvik VM进程系统、AMS、WMS和Package Manager Service等等。而这些类别里又包含很多小类,有许多的分支,每一个小类里还有很多小细节,这些都是Android开发工程师必须熟练掌握和精通的技能。
如果做成一个框架图的话,就是下面这样的:这只是一个简单的框架图,其实还有很多分支
很多大厂公司在面试的时候都会有很多的技术面试题,这是考察程序员必不可少的题目。
比方说:
1.Android中多进程通信的方式有哪些?
2.进程通信你用过哪些?原理是什么?(字节跳动、小米)
3.描述下Binder机制原理?(东方头条)
4.Binder线程池的工作过程是什么样?(东方头条)
5.Handler怎么进行线程通信,原理是什么?(东方头条)
6.Handler如果没有消息处理是阻塞的还是非阻塞的?(字节跳动、小米)
7.handler.post(Runnable) runnable是如何执行的?(字节跳动、小米)
8.handler的Callback和handlemessage都存在,但callback返回true handleMessage还会执行么?(字节跳动、小米)
9.Handler的sendMessage和postDelay的区别?(字节跳动)
10.IdleHandler是什么?怎么使用,能解决什么问题?
11.为什么Looper.loop不阻塞主线程?(腾讯)
12.Looper无限循环为啥没有ANR(B站)
13.Looper如何在子线程中创建?(字节跳动、小米)
14.Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米)
15.如何更新UI,为什么子线程不能更新UI?(美团)
16.ThreadLocal的原理,以及在Looper是如何应用的?(字节跳动、小米)
17.Android 有哪些存储数据的方式?
18.SharedPreference原理,commit与apply的区别是什么?使用时需要有哪些注意?(腾讯)
19.如何判断一个 APP 在前台还是后台?
20.如何做应用保活?
21.一张图片100x100在内存中的大小?(字节跳动)
22.Intent的原理,作用,可以传递哪些类型的参数?
然后会再扩展到和这些知识点相关的更深层次的知识点细节,直到问的你答不上来为止,以此来探寻你的技术边际,这样就能更深入地了解你的技术能力。
Android Framework重要性
Android Framework 开发虽然比较偏底层,圈子窄,但是能掌握一些原理的东西,可以触类旁通,往应用层发展也可以,接下来我们看看Framework知识有多重要。举几个栗子,你或许就能清楚了。
像掉帧监控,函数插装,慢函数检测,ANR 监控,启动监控,都需要对 Framework 有比较深入的了解,才能知道怎么去做监控,利用什么机制去监控,函数插桩插到哪里,反射调用该反射哪个类哪个方法哪个属性……
目前大公司的app开发都要基于模块化、层次化、组件化、控件化的思路来设计架构,而这一切的基础都建立在Android Framework系统框架底层原理实现之上。
Binder是Android系统中最重要的组成
Binder是什么呢?请看下图,图是最能清楚明了的直观表达的工具
优势描述
性能:只需要一次数据拷贝,性能上仅次于共享内存
稳定性:基于C/S架构,职责明确,架构清晰,因此稳定性好
安全性:为每个App分配UID,进程的UID是鉴别进程身份的重要标志
Android IPC Binder机制包含了 :Linux预备知识、传统的Linux中IPC通信原理、Binder IPC通信原理和Binder Java层实现,这些里面都各有好多小分支,小细节需要仔细的去学习掌握。
腾讯高级工程师Binder面试
1.为什么 Android 要采用 Binder 作为 IPC 机制?
2.Binder到底是什么?
3.Binder机制是如何跨进程的?
4.一次Binder通信的基本流程是什么样?
5.为什么 Activity 间传递对象需要序列化?
6.四大组件底层的通信机制是怎样的?
7.AIDL 内部的实现原理是什么?
这些都是关于Binder机制面试时会问到的点。
Handler主要用于异步消息的处理: 有点类似辅助类,封装了消息投递、消息处理等接口。当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分在消息队列中逐一将消息取出,然后对消息进行处理,也就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。
2、为什么要用handler?
为什么要用handler?不用这种机制行不行?不行!android在设计的时候,就封装了一套消息的创建、传递、处理机制,如果不遵循这种机制,就没有办法更新UI信息,就会抛出异常信息。
在android开发中,经常会在子线程中进行一些操作,当操作完毕后会通过handler发送一些数据给主线程,通知主线程做相应的操作。探索其背后的原理:子线程handler主线程其实构成了线程模型中的经典问题生产者-消费者模型。生产者-消费者模型:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加数据,消费者从存储空间中取走数据。
⑶ 安卓开发需要学习什么
学习分三个阶段:
1,Android基础阶段:平台架构特性(JAVA/C) Market/应用程序组件 环境搭建与部署/打包与发布 AVD/DDMS/AAPT 调试与测试 相关资源访问/资源制作 Activity/Service/Broadcast Receiver/Content Provider/原理(生命周期)及深层实现
2,Android进阶初级:组件Widget/ 菜单Menu/ 布局Layout 详解 Xml解析(Pull/Dom/Sax)/JNI 解析SQL数据库原理,。
SQLite /SharedPreferences/File详解 多媒体Audio/Video/Camera 详解
3,Android进阶高级:蓝牙/WIFI SMS/MMS 应用实现 深层次解析GPS原理。
实现LocationManager/LocationProvider 进行定位/跟踪/查找/趋近警告以及Geocoder正逆向编解码等技术细节 2D图形库(Graphics/View)详解 SDCARD/传感器/手势 应用实现
(3)androidframework学习扩展阅读:
知识体系
1、Unix/Linux平台技术:基本命令,Linux下的开发环境
2、企业级数据库技术:SQL语言、SQL语句调优、Oracle数据库技术
3、Java 语言核心技术:Java语言基础、Java面向对象编程、JDK核心API、Java集合框架、Java网络编 程、JavaI/O编程、Java多线程编程、Java异常机制、Java安全、JDBC、XML
4、软件工程和设计模式:软件工程概述、配置管理及SVN、UML、基本设计模式
5、Android应用开发基础:Android开发平台、Eclipse+ADT开发环境、AVD及传感模拟器调试、Android核心组件、Android常用组件、Android高级组件、文件及网络访问、SQLite数据库编程、后台服务编程
6、互联网核心技术: HTML、CSS、JavaScript、JQuery、Ajax应用
7、Android高级应用开发:音频视频摄像头、互联网应用、GPS和位置服务、Google Map、2D3D绘制、传感器开发、游戏开发、电话及SMS服务、网络BluetoothWi-Fi等。
8、Android系统级开发:移植、驱动、NDK(C方向)。
9、JavaEE核心技术:Servlet核心技术、JSP核心技术、Struts、Spring、Hibernate框架。
⑷ Android framework 如何开发需要学习什么知识
"能够从源码下载到编译,到移植进开发板都能顺利的完成" 你的这些经验挺符合要求的啊,招聘信息里写的"Android Framework"指的应该就是/frameworks/base,多数是Java代码。看样子他们是在做Android设备,厂商一般是做移植,然后根据自己产品的特点可能会在frameworks及整个平台里加自己的扩展功能。