Android分层中native是哪一层?其他层是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android分层中native是哪一层?其他层是啥?相关的知识,希望对你有一定的参考价值。
参考技术A分层方式当中,Native层就是本地框架。
这些层大致如此区分:
Java应用程序无需过多解释,基本可以理解为各个App,由Java语言实现。Java框架层就是常说的Framework,这层里东西很多也很复杂,比如说主要的一些系统服务如ActivityManagerService、PackageManagerService等,
编写android代码之所以能够正常识别和动作,都要依赖这一层的支持。这一层也是由Java语言实现。
Native层这部分常见一些本地服务和一些链接库等。这一层的一个特点就是通过C和C++语言实现。比如我们现在要执行一个复杂运算,如果通过java代码去实现,那么效率会非常低,此时可以选择通过C或C++代码去实现,然后和上层的Java代码通信(这部分在android中称为jni机制)。
又比如我们的设备需要运行,那么必然要和底层的硬件驱动交互,也要通过Native层。Linux内核空间这部分顾名思义,就是Kernel部分。
扩展资料:
一个native method方法可以返回任何java类型,包括非基本类型,而且同样可以进行异常控制。这些方法的实现体可以制一个异常并且将其抛出,这一点与java的方法非常相似。当一个native method接收到一些非基本类型时如Object或一个整型数组时,
这个方法可以访问这些非基本型的内部,但是这将使这个native方法依赖于你所访问的java类的实现。有一点要牢牢记住:我们可以在一个native method的本地实现中访问所有的java特性,但是这要依赖于你所访问的java特性的实现,而且这样做远远不如在java语言中使用那些特性方便和容易。
native method的存在并不会对其他类调用这些本地方法产生任何影响,实际上调用这些方法的其他类甚至不知道它所调用的是一个本地方法。JVM将控制调用本地方法的所有细节。需要注意当我们将一个本地方法声明为final的情况。
用java实现的方法体在被编译时可能会因为内联而产生效率上的提升。但是一个native final方法是否也能获得这样的好处却是值得怀疑的,但是这只是一个代码优化方面的问题,对功能实现没有影响。
如果一个含有本地方法的类被继承,子类会继承这个本地方法并且可以用java语言重写这个方法(这个似乎看起来有些奇怪),同样的如果一个本地方法被final标识,它被继承后不能被重写。
本地方法非常有用,因为它有效地扩充了JVM。事实上,我们所写的Java代码已经用到了本地方法,在Sun的Java的并发(多线程)的机制实现中,许多与操作系统的接触点都用到了本地方法,这使得java程序能够超越Java运行时的界限。有了本地方法,Java程序可以做任何应用层次的任务。
参考资料:百度百科-Native
OSI 模型中的 HTTP 在哪一层?
【中文标题】OSI 模型中的 HTTP 在哪一层?【英文标题】:In which layer is HTTP in the OSI model? 【发布时间】:2016-11-30 11:48:17 【问题描述】:有人说HTTP在OSI模型中的会话层。
但在 Tanenbaum 的计算机网络中,据说 HTTP 位于 OSI 模型中的应用层。
也有人说HTTP没有会话的概念。是不是说HTTP不能在会话层?
那么 HTTP 在会话层中吗?谢谢。
更新:对于 HTTP/2,OSI 模型中的层是什么?
【问题讨论】:
仅仅因为两个规范都使用了“会话”这个词,并不意味着会话在两者中的含义相同。这是同义词。 HTTP 位于 Internet 协议套件模型的应用层和 OSI 模型的会话层。 OSI 模型的会话层负责创建和管理会话,是传递数据的第一层。 HTML 在表示层中。 【参考方案1】:在 OSI 模型中 HTTP 在哪一层?
它位于应用层。请参阅RFC 7230 中的以下引用,这是当前定义 HTTP/1.1 协议的文档之一:
超文本传输协议 (HTTP) 是一种无状态的应用程序级请求/响应协议,它使用可扩展语义和自描述消息有效负载与基于网络的超文本信息系统进行灵活交互。
HTTP 是一种无状态的请求/响应协议,它通过在可靠的传输层或会话层“连接”上交换消息来运行。
也有人说HTTP没有会话的概念。是不是说HTTP不能在会话层?
正如前面在RFC 7230 的引用中提到的,HTTP 协议是无状态,其中从客户端到服务器的每个请求(应该)包含理解请求所需的所有信息,而不是利用服务器上存储的任何上下文。
RFC 6265 为 HTTP 中的状态管理定义了一些机制,例如 cookie,允许在服务器端进行会话管理(但它不会以任何方式使 HTTP 有状态)。
HTTP 中session 的概念与OSI 模型中session 的概念不同。无论如何,HTTP 是一个应用层协议。
OSI 模型
OSI(开放系统互连)模型是由国际标准化组织创建的概念模型,它使不同的通信系统能够使用标准协议进行通信。
它为不同的计算机系统提供了一个能够相互通信的标准,可以看作是计算机网络的通用语言。它基于将通信系统拆分为七个抽象层的概念,每一层都堆叠在最后一层之上。
下图borrowed from Cloudflare很好地说明了OSI模型是什么样的:
应用层是唯一直接与用户数据交互的层。因此,Web 浏览器和电子邮件客户端等软件应用程序依赖于应用程序层来发起通信。
但应该明确的是,客户端软件应用程序不是应用程序层的一部分:而是应用程序层负责协议(例如 HTTP 和 SMTP)和软件的数据操作依赖于向用户呈现有意义的数据。
OSI 模型与 TCP/IP 模型
虽然 OSI 模型是通用网络系统的综合参考框架,但需要指出的是,现代 Internet 并未严格遵循 OSI 模型。
现代 Internet 更接近于更简单的 Internet 协议套件,通常称为 TCP/IP,因为套件中的基础协议是 TCP (传输控制协议)和 IP(互联网协议)。
下图说明了 OSI 和 TCP/IP 模型如何相互关联:
更新:已添加此部分以解决 noɥʇʎԀʎzɐɹƆ 发起的赏金问题,他要求使用 HTTP/2 详细信息更新此答案。
尽管引用了定义 HTTP/1.1 协议的文档,但以上所有内容也适用于 HTTP/2。请参考RFC 7540 中的以下引用,该文档定义了 HTTP/2 协议:
HTTP/2 连接是在 TCP 连接之上运行的应用层协议。客户端是 TCP 连接发起者。
【讨论】:
我想强调 OSI 模型是一个参考模型。它不是一个可基于的标准,特别是对于第 5 层到第 7 层。HTTP 也可以被视为表示层协议。它本身并不做“人机交互”,而是html代理使用HTTP来传输数据。 那么,认为HTTP同时负责应用程序和表示层是否正确?编码和加密(https)是表示层的一部分,对吧?并且这些被配置为 http/s 协议的一部分 @MikelSanVicente 不是。 TPP/IP 模型中不存在表示层。 对,但是如果我们谈论的是 OSI 模型呢?从概念上讲,两者兼而有之? @MikelSanVicente 在 OSI 模型中,表示层用于压缩和加密协议。适合这一层的一些协议是 SSL(安全套接字层)和 TLS(传输层安全)。 HTTP/HTTPS 位于它们之上,仍然在表示层上。【参考方案2】:超文本传输协议 (HTTP),是 Web 的应用层协议, 是 Web 的核心。它在 [RFC 1945] 和 [RFC 2616] 中定义。
【讨论】:
那些在近五年前被 RFC 7230 虽然 7235 淘汰了 超文本传输协议 (HTTP) 是一种无状态的应用层协议 这不会使您的参考文献过时。【参考方案3】:HTTP 位于Internet 协议套件模型的应用层和OSI 模型的会话层。 OSI 模型的 Session 层负责创建和管理会话,是传递数据的第一层。
HTTP 可以重定向会话、重用它们并拥有持久连接。
【讨论】:
以上是关于Android分层中native是哪一层?其他层是啥?的主要内容,如果未能解决你的问题,请参考以下文章