我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android架构设计的思想与原则是什么?

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android架构设计的思想与原则是什么?

  近工作中遇到了android中的权限问题,发现Android确实是开源的,但并不开放,比如权限控管相当严格,限制做很多事情,这一点得意于linux内核。这也勾起来对其架构研究的兴趣,不知到哪位能够深度剖析下android架构设计的思想与原则?

  近,开发者在知乎社区中Android的架构设计展开了讨论。

  有人问“Android 架构设计的思想与原则是什么?”:

  近工作中遇到了Android中的权限问题,发现Android确实是开源的,但并不开放,比如权限控管相当严格,限制做很多事情,这一点得益于Linux内核。这也勾起来对其架构研究的兴趣,不知到哪位能够深度剖析下Android架构设计的思想与原则?

  rlei分析了Android的设计哲学:

  理解好Intent,可以理解Android哲学("所有应用生来平等")的一部分。举个简单的例子,iOS里面应用要集成SNS如facebook/twitter/sina weibo等,都需要应用自己实现(iOS5也只是集成twitter一家);Android上只需要广播一个share内容的intent。从理解Intent如何工作开始,你在慢慢理解Activity Manager, Package Manager, Services这些Android的重要组件是如何工作的。

  另外Binder是Android架构里非常核心的一块。Android基于Intent的消息传递和组件/应用解耦,下面的基础都是Binder IPC。在这一点上,Android实际上是光荣的传承了BeOS和Palm OS 6(悲催的OS6...)未能发扬光大的一部分。

  MVC(Content Provider, Activity, Layout, Adapters)这个比较基础,也不算Android特有的。

  Content Provider对数据访问的抽象也是比较有意思的一块。理想情况下,content provider可以让客户端用URI以语义化的方式访问数据(URI本身即表示数据层次结构和查询条件),而下面数据库表的结构可以任意变动,不影响客户端代码。当然实做的时候content provider还是会被各种复杂的where子句暴露出SQL的实现细节……

  至于Android的权限管理,其实比较简单,主要是利用现成的Linux安全模型,进程之间相互隔离。API级别的权限管理和JVM类似。

  Billy Cui重点解析了权限系统的设计:

  Android的权限系统是基于Linux,但又增加了很多自己的控制模块。

  总体上来说,其分为以下几部分权限系统:

  1. userid : 继承于linux,对于多个app,通过shareuid的方式可以使用同一个userid,主要承担一些目录访问权限之类的工作,比如私有目录只能由同一uid应用访问。

  2. 安装level:system level or app level,这个是根据应用的安装位置决定的,在system/app下安装的应用是system level,在权限访问中会得到更多的权限,比如静默安装应用的权限等。

  3. permission : 这个是主要的权限控制,一般开发者开发应用主要是接触这个部分,在这部分中,会根据应用在AndroidManifest.xml中声明的use-permission而在访问相应api或资源时判断其是否有访问权限,比如常用的android.permission.INTERNET等。

  4. signature: 签名,是Android权限系统中的重要组成部分,对于系统签名的应用,会有一些特殊的功能,而shareuid等特性也是需要同一签名作为基础。此外,permission在设置/自定义其权也经常会使用到签名,比如控制只有我自己的应用才可以访问我自己定义的公开API。

  除此以外,其实Android在uid的里面设置了一些预定义有特殊功能的uid,比如system/media等,在配置其system level的services的时候会用到。

  董兆辉则认为Android主要是基于组件搭配思想:

  Android是开源的,不过开源不意味着可以乱来,开源只是告诉你我是怎么做的,至于为什么这么做,是另外一个问题了。任何一个系统如果没有权限管理,那不是乱套了么?我倒是觉得Android的权限管理设计的还不错,有些地方比iOS好,也较灵活,不过同样是因为这一点,容易被利用。

  说到Android架构的设计思想和原则,按我的理解主要是组件搭配,即在用户看来,所有的module或者组件,都是可以重复利用和简单组合的。想法是好的,不过有得必有失,或者说Android现在做的还不够好,在性能方面是很低的,否则的话Android也不会推出补丁(NDK之类的,dalvik的不断升级)。

  我觉得所有Framework或者平台或者语言都想给应用开发者方便使用的接口,人性化的体验,同时又要争取大的性能,两者权衡折中吧。不过随着硬件速度的飞速增长,性能的权重会变低。

  范怀宇还谈到了资源体系:

  Android架设在Linux之上,因此,继承了Linux可移植性、用户管理机制、文件系统,等等。

  Android的核心在Framework层,本质上,这是一个基于组件的应用开发系统,组件间通过消息(Intent)进行通信。一方面,Intent是通信信息的载体,另一方面,Intent也定义了Android组件的通信协议。

  Android可以对组件所运行的进程做托管,在Android中,进程概念相当薄弱。依赖于进程托管,Android可以轻松支撑多任务多进程的应用模型。

  除了组件,资源体系也是Android中比较特色的一块,它提供了完整的资源支持,可以用来描述一切与UI相关的内容,并实现多设备的适配。

  读者对Android的架构有何理解?欢迎发表自己的看法。


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android架构设计的思想与原则是什么?

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android架构设计的思想与原则是什么?

近工作中遇到了android中的权限问题,发现Android确实是开源的,但并不开放,比如权限控管相当严格,限制做很多事情,这一点得意于linux内核。这也勾起来对其架构研究的兴趣,不知到哪位能够深度剖析下android架构设计的思想与原则
2022-06-06

架构设计思想AKF拆分原则

当然,X、Y、Z 轴的扩展并不是孤立的,我们可以同时应用这 3 个维度扩展系统。分布式系统非常复杂,AKF 给我们提供了一种自上而下的方法论,让我们能够针对不同场景下的性能瓶颈,以最低的成本提升性能。​

Spark 架构设计与原理思想

Spark 在 MapReduce 的基础上进行了改进,它主要使用内存进行中间计算数据存储,加快了计算执行时间,在某些情况下性能可以提升百倍 。

openstack的架构设计原则是什么

OpenStack的架构设计原则包括以下几个方面:模块化和可扩展性:OpenStack的架构采用模块化设计,将不同功能的组件划分为独立的模块,如计算、网络、存储等。每个模块可以独立部署和扩展,从而实现灵活的架构设计。松耦合和可插拔性:Ope
2023-10-25

rainbond的架构设计原理是什么

这篇“rainbond的架构设计原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“rainbond的架构设计原理是什么
2023-06-29

Kubernetes设计的原则是什么

本篇内容介绍了“Kubernetes设计的原则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!引言:今天我要带给大家的是2018年底,在
2023-06-04

php中里氏替换原则的思想是什么

在PHP中,里氏替换原则是对类继承的一种约束,该原则的主要思想是不能随便去继承不合适的、有多余方法或者属性的类,子类可以扩展父类的功能,但不能改变父类原有的功能。
2018-02-27

Android设计模式SOLID六大原则是什么

本篇内容主要讲解“Android设计模式SOLID六大原则是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android设计模式SOLID六大原则是什么”吧!单一职责原则定义定义:确保单例类
2023-06-25

架构设计的理念和原则是SaaS的核心灵魂

我相信,优秀的技术架构是演进出来的。这不意味着你要一个个坑重新踩一遍,我已经踩了这么多年的坑,不断地从坑里爬出来。今天的分享就是为了让大家少踩一些坑。或者当你准备往下踩的时候,你感觉这是个坑,你可以以开放的心态对外多交流,通过这种交流来加速

java类设计的基本原则是什么

Java类设计的基本原则包括:单一职责原则(Single Responsibility Principle,SRP):一个类应该只有一个责任,即一个类应该只有一个引起它变化的原因。开放封闭原则(Open Closed Principle,O
2023-10-27

计算机中结构化程序设计原则主要有四个原则分别是什么

这篇文章将为大家详细讲解有关计算机中结构化程序设计原则主要有四个原则分别是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。结构化程序设计原则主要有四个原则:1、自顶向下;先从最上层总目标开始设计,逐步使
2023-06-08

“开闭原则” 推崇模块业务 “只读” 的思想,是很好的架构治理哲学

“开闭原则” 推崇模块业务 “只读” 的思想,是很好的架构治理哲学。它告诉我们,软件是可以以 “搭积木” 的方式搭出来的。核心的一点是,我们如何形成更多的 “积木”,即一个个业务只读、接口稳定、易于组合的模块。

架构师进阶,微服务设计与治理的16条常用原则

所谓单一职责原则,就是对一个服务而言,它的功能要单一,只做与它相关的事情。在微服务的设计过程中要按职责进行设计,彼此保持正交,互不干涉。

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录