一、运行机制的区别
1、iOS 采用的是沙盒运行机制
(1)沙盒机制
出于安全考虑,iPhone对于安装在上面的应用程序有所限制,这个限制就是应用程序只能在该程序创建的文件系统中读取文件,不可以去其他地方访问,此区域被称为沙盒,所以所有的非代码文件都要保存在此,例如图像、图标、声音,映像,属性列表,文本文件等。总体来说沙盒就是一种独立、安全、封闭的空间。
(2)沙盒机制的特点
每个应用程序都有自己的存储空间。每个应用程序都不可以翻过自己的围墙去访问别的存储空间的内容(已经越狱的除外)。在访问别人沙盒内的数据时需要访问权限。沙盒(sandbox)的核心内容是:sandbox 对应用程序执行各种操作的权限限制。
2、Android 采用的是虚拟机运行机制
(1)什么是Dalvik虚拟机
Dalvik 是 Google 公司自己设计用于 Android 平台的 Java 虚拟机,它是 Android 平台的重要组成部分,支持 dex 格式(Dalvik Executable )的 Java 应用程序的运行。 dex 格式是专门为 Dalvik 设计的一种压缩格式,适合内存和处理器速度有限制系统。 Google 对其进行了特写的优化,使得 Dalvik 具有高效、简洁、节省资源的特点。从 Android 系统架构图知, Dalvik 虚拟机运行在Android的运行时库层。
(2)Dalvik 虚拟机的功能
Dalvik 作为面向 Linux、为嵌入式操作系统设计的虚拟机,主要负责完成对象生命周期管理、堆栈管理、线程管理、安全和异常管理,以及垃圾回收等。 Dalvik 充分利用 Linux 进程管理的特性,对其进行了面向对象的设计,使得可以同时运行多个进程,而传统的 Java 程序通常只能运行一个进程,这也是为什么 Android 不采用 JVM 的原因。 Dalvik 为了达到优化的目的,底层的操作大多和系统内核相关,或者直接调用内核接口。另外, Dalvik 早期并没有 JIT 编译器,直接 Android 2.2 才加入了对 JIT 的技术支持。
(3)Dalvik 虚拟机具有以下特点:
使用 dex格式的字节码,不兼容 Java 字节码格式
代码密度小,运行效率高,节省资源
常量池只使用32位的索引
有内存限制
二、两者后台制度不同
1、iOS 采用“伪后台”的形式
(1)iOS 系统的后台机制过程
当我们程序从前台退到后台(按 home 键)后,将执行程序的委托方法,它的主线程会被暂停。应用程序只给了我们可怜的一点点时间(也就是秒级别的)来处理东西,然后,所有的线程都被挂起了。这个时候 APP 依然驻留在内存中,这种状态下,不调用苹果已开放的几种后台方法,程序便不会运行;如果在这个时候,使程序继续运行,则为后台状态;如果当前内存将要不够用时,系统会自动把之前挂起状态下的 APP 清出内存。所以我们看到,有些时候打开 APP 时,还是上次退出时的那个页面那些数据,有时则是重新从闪屏进入。
(2)iOS 系统后台机制大概可以分为5种状态:
Not Running : APP 没有启动,也没有后台运行;
Active :用户正在使用 APP,比如说我们聊微信看网页的时候,APP 就处于 Active 状态;
Inactive :这是一个过渡的状态,APP 虽然打开了,但是用户没有跟 APP 有任何互动操作;
Background:APP 在后台运行,微信会在没有打开的时候接收消息;
Suspended:APP 虽然在后台运行,但是处于休眠状态,只占用一点内存。
2、安卓中任何程序都能在后台运行,直到没有内存才会关闭
(1)Android 真后台运行机制
Android 上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机,每个 APP 都有自己的进程,每个进程都有自己的内存空间,这样设计的原因是可以避免虚拟机崩溃导致整个系统崩溃,但代价就是需要更多内存。以上这些设计确保了 Android 的稳定性,正常情况下最多单个程序崩溃,但整个系统不会崩溃。
(2)Android 的进程从高到低分为5种:
前台进程:正在与用户交互的进程,通俗来讲就是你当前使用APP 的进程;
可见进程:可以被用户看到,但是没有和用户交互,例如一个 Activity 以对话框的形式覆盖在当前 Activity 上面,当前 Activity 可以被用户看到,但是不和用户交互;
服务进程:也就是我们常说的 Service ,能够运行在后台,常见的有音乐类的 APP ;
后台进程:注意,这个后台进程不要和服务器进程搞混了,它的意思是说当前 APP 在后台运行,例如我启动了 APP ,然后点击 Home 键返回到桌面,那么这个 APP 就会被切换到后台进程;
空进程:空进程指的是在这些进程内部,没有任何东西在运行。保留这个进程的唯一目的是用作缓存,以缩短该应用下次在其中运行组件所需的启动时间。
三、两者最高权限指令不同
1、iOS 中用于 UI 指令权限最高。
2、Android 中数据处理指令权限最高。
四、推送机制
1、iOS 在软件关闭的情况下,依然可以接收推送消息
手机消息当然都是通过服务器推送到我们手机上的,对于iOS 的用户来说,苹果有 APN 服务器来负责消息的推送。当你第一次使用 APP 时,会询问是否接收通知,如果你选择了是,那么服务器就会记录你的 ID ,当有消息通知的时候,这些数据是先推送到苹果的服务器中,然后通过苹果的 APN 服务器推送到用户手机上的。这样的设计让软件彻底关闭的时候还可以接收到消息通知,一方面释放内存,一方面也不会耽误接收消息。
2、Android 在软件关闭的情况下,无法接收推送消息
对 Android 手机来说,Google 也有类似的 GCM 服务器来推送消息,不过因为国内的手机都没有 Google 服务无法收到 Google GCM 服务器推送的消息。Android 的推送都是通过服务来实现的,就算应用没有启动但是服务还在一样可以收到推送。所以只能是 Android 自己启动 Service 来实现推送,当应用杀死后 Service 如果被杀死就无法收到推送。
五、渲染机制不同
Android:主线程普通优先级——加载一个页面,全部加载完成的同时加载当前页面,当你看到页面后,实际后台仍在加载,因此增加了处理器的压力。
iOS:实时优先级——加载整个页面,优先加载主屏幕显示区域
六、开源性不同
Android:完全开源,任何开发厂商和开发者都可开发安卓的软件,由于开源,各大品牌手机硬件差异大,导致体验不同,兼容性不好
iOS:封闭,仅苹果拥有
七、编程语言不同:
Android:java
IOS:Objective-c
八、升级应用
Android:自动升级应用,也可通过应用市场来升级
IOS:需要通过app store升级
九:软硬件结合
Android:由于代码开源,因此很多开发厂商都可以根据自己的设定来开发不同的手机,APP不会针对各大品牌的手机专门做优化,因此软硬件结合差
IOS:由于封闭,因此苹果一家独有专利,所有的APP都针对IOS做优化,因此软件结合较好
十、应用的删除操作不同
Android:常见的删除某一个操作,用长按,点击删除或者左滑删除
IOS:很多应用都支持左滑删除操作
十一、获取日志和签名方式不同
Android:可通过adb logcat获取日志,Android studio,DDMS来获取到日志信息。签名可以通过jarsigner -verify -certs 包名
IOS:用xcode中debug工具/Itunes高级功能查看实时log,获取签名:解压包取出plist文件,查看应用签名及版本信息,并要检查证书正确性
十二、分辨率不同
Android:分辨率多达20多种
IOS:5种
十三、按键
Android:底部有3个按键:返回键、主菜单、前进键,在应用返回中,都可通过返回键回退到上一步
IOS:只有home键,所有的应用进入只有一个入口,每个应用界面中都有返回出口
总结:
Android:开源、界面好看,但安全性差、漏洞多、稳定性差、系统耗电大、流量消耗大
IOS:封闭、安全规整、用户体验好
网友评论