android&ios区别
转自(只讲干货的老张)
面试中经常提问到一个点,就是做手机测试绕不去的点,那就是Android和ios的区别。这篇文章只做一些比较重要的点讲一下,太深入部分就不讲了,毕竟我做的是测试,而Android开发和ios开发又是一个很深入的专业,我就不班门弄斧了。
首先从开发语言上讲,Android因为是采用分层思想,最上面是应用层,往下一级是java API框架层,再往底层就是原生的c/c++层,再往下就是硬件驱动以及linux内核层。一般情况下,Android开发都是在最上面2层开发应用。我们一般介绍时会说Android语言跟java语言同源就是这么由来的。而且Android本身开源,所以全世界的各种手机都可以使用Android系统。而ios本身是一个类Unix操作系统,不开源。使用的开发语言是Objective-C,一般也叫OC.只在apple公司的手机、平板等设备上使用。
如下为Android架构图:
再说点物理上的区别,而且在测试时很容易被忽略的点,Android手机的3个虚拟按钮,返回、回到首页、菜单键。最早的时候,Android手机都是物理按键,随着大家对于屏幕占比的重视,导致虚拟键的功能越来越流行,物理按钮被干掉。而虚拟按钮的出现,也给开发工作加了很多戏,问题就是很多Android应用里面如果不处理这些虚拟按钮,就很容易导致屏幕出现黑边,误碰到虚拟按钮,导致app退出,或者会跟app的一些按钮位置重合,导致不能点击到对应的功能按钮,以及想调出虚拟按钮时,又不出来,特别让用户烦恼。而ios开发的同学目前来说就没有这样的烦恼,早期的iPhone手机只有一个物理的小圆点按钮,可以双击,也可以单击,而返回效果在很早的时候,就通过左滑就解决了。
而Android手机跟ios手机还有些不一样的地方,那就是各种不同分辨率的适配,早期的ios手机屏幕就是固定的几个尺寸,适配很容易,现在也是有了多个版本的手机,导致机型也变得适配略微麻烦了。而Android手机在全面屏概念出来以后,就彻底放开了,各种手机屏幕的分辨率,也导致了测试在测试时,只能优先一部分用户的机型体验,而剩下的用户机型只能忽略。当然我们可以通过接入一些第三方的平台,比如友盟,来获得我们线上用户的真实使用手机的占比,然后找到top10或者top5,然后买来对应的机型后再做兼容性测试。
而分辨率相比较而已,还不是最恶心的,我感觉比较恶心的就是各种异形屏,比如刘海,或者水滴等,这样的手机app进行适配时,我感觉没有意义的,然而苹果开头了,大家都开始学上了。因为异形的那个地方,你不知道放啥,在整个app的所有页面,你都需要考虑到这个地方怎么特殊处理。要不就是黑边给你看。
还有就是手机的操作系统版本,这个问题,之前我觉得影响不是很大,但是测的越久,你就发现,不同的手机操作系统版本,效果还不一样,比如最常见的就是华为手机经常会出现一些莫名其妙的bug。当然其实我们知道为啥,因为华为本身会对手机的操作系统做一些比较深入的优化,而其他手机厂商,可能只是给换个马甲的事,就像是王者荣耀的英雄跟皮肤一样的关系。所以我们做兼容性测试时,可以重点关注一下华为手机机型。而ios之前遇到过让所有的app从http转为https,而我们当时的手机app的免费https证书到期,在ios的一些没有升级到必须使用https的操作系统版本手机上,使用没有任何问题,而使用ios的高版本,就直接app会闪退。
所以我们一般考虑手机的操作版本兼容性,Android这边是从4.4到9,而ios是从10-13.主要还是看你们公司的产品受众主要用哪些机型。
另外一点就是安全性,众所周知的情况是,Android的个人信息泄露比较严重,很多app在安装时会要求很多权限,或者即使不给,他也有各自手段偷偷的获取这些手段。而ios一般情况下权限管理的很严格,没有意义的权限,一般情况下不会给。而且苹果官方的审核机制也是比较严格,经常会出现审核不通过的情况。所以ios的权限一般情况下,感觉会要的很少。
Android采用的虚拟机机制,而ios采用的是沙盒机制。沙盒机制的特点是:每个应用只能访问自己应用的数据和文件,不能随意去访问其他的沙盒内容。而虚拟机机制的特点是:每个应用程序都在独立的虚拟机中,这些独立的虚拟机实例都是一个独立的进程空间。而Android这样做的好处就是跟linux内存管理很相似,是真正的多进程管理,虽然可用内存最后看着少,但是实际上很多程序已经分配了一定的内存了,如果需要,在唤起时,不会再次分配一次,而且已经有了缓存,启动和响应会比较快。
Android的内存管理方式和ios不一样。Android在手机app切换到后台时,内存空间会保留给这个app,当下次再切换到前台时,app会快速的响应。而ios是app被切换到后台后,很短的时间内就会被清理内存,杀死进程。这样做的好处也是为了给当前切换到前台的应用腾出空间来。这样做的好处就是省电,因为只有前台一个应用在跑。当然还有一些特殊的应用可以一直在后台运行,比如:音乐、gps等。Android的出发点是为了让app切换时应用响应速度快,但是造成的后果就是内存可能会被历史应用占用的内存过多,而继续创建新的应用时不够用,才会回收内存。导致想用的app打开时变慢。
另外一点就是响应优先级不同,ios是对于屏幕反应的优先级最高,也就是UI指令最高。而Android是数据优先级最高。这2者的对比,可以用一个简单的例子来对比,ios在打开一个app时,它对屏幕的响应优先级是最高的,之后才运行app代码。Android系统打开app的顺序是先运行app的代码,之后再显示在用户的手机屏幕上。直观来看,对用户来说,就是我在ios上点了一下,接着就有反应了,而Android慢了半拍。
再一点,两者的安装应用方式不一样,Android通过各种应用商店,比如豌豆荚,91助手等等,ios只能通过应用商店,而测试版本的软件,Android可以通过把apk包导入到手机sdcard中,直接安装或者通过adb install命令安装包,ios可以通过iTunes方式安装或者爱思助手之类的软件进行安装ipa。当然现在比较流行的是通过第三方来管理测试包,比如说:蒲公英,这个平台可以把你的测试包上传后,然后开发者可以把需要下载测试包的同学手机UUID加到白名单后,就可以使用ios的测试包了。当然这个平台也可以上传Android软件测试包。
另外一点,就是Android因为自身代码的开源性,很多的app开发者如果不注意保护自己的代码,很容易被破解后,被其他人打包为别人的,所以Android的app一般都需要做代码的混淆。也就是把正常的代码,混淆完之后,就不容易理解了,比如很常见的方式就是代码的类名改为:a、b、c等等没有意义的名字。而ios因为本身不开源的特点,就不需要做代码混淆。
最后再讲一点,消息推送机制不一样。Android的消息推送底层一般就是2种实现方式,一种是push,一种就是pull。push的意思就是服务器需要给app推送消息了,就直接发送给app,app是被动的。另外一种就是pull,pull的意思就是app定期去服务器那边轮询是否有消息推送。这样来说的话,pull的方式比较费app的性能,所以一般情况下都是通过push。push的方式国内目前一般情况下都是通过第三方平台。比如:友盟、极光推送等。因为自己做推送的话,会因为开发成本、服务器成本等不合适。而ios的消息推送则是使用苹果官方的一个APNS的服务器来转发我们的消息推送。也就是服务器端把推送给app的消息给APNS,由APNS再转发给我们的app端。Android消息推送时,国内使用的第三方平台也是扮演的这个中间服务商的一个角色。
android&ios区别的更多相关文章
- app测试中,ios和android的区别
App测试中ios和Android的区别: 1. Android长按home键呼出应用列表和切换应用,然后右滑则终止应用: 2. 多分辨率测试,Android端20多种,ios较少: 3. 手机操作系 ...
- Tomcat双向Https验证搭建,亲自实现与主流浏览器、Android/iOS移动客户端超安全通信
紧接着<Tomcat单向Https验证搭建,亲自实现与主流浏览器.Android/iOS移动客户端安全通信>,此处演示下更安全的双向Https认证的通信机制,为了清晰明了,以下进行单独描述 ...
- Tomcat单向Https验证搭建,亲自实现与主流浏览器、Android/iOS移动客户端安全通信
众所周知,iOS9已经开始在联网方面默认强制使用Https替换原来的Http请求了,虽然Http和Https各有各的优势,但是总得来说,到了现在这个安全的信息时代,开发者已经离不开Https了. 网上 ...
- React++ node.js ++SQL Sever ++MySQL++ python ++ php ++ java ++ c++ c#++ java ++ android ++ ios ++Linux+
"C语言在它诞生的那个年代,是非常不错的语言,可惜没有OOP.当项目臃肿到一定程度,人类就不可控了. 为了弥补这个缺陷,C++诞生了.而为了应对各种情况,C++设计的大而全,太多复杂的特性, ...
- 用HTML5/CSS3/JS开发Android/IOS应用框架大全
现在人人都想成为安卓/IOS应用开发工程师.其实,安卓/IOS应用可以用很多种语言来实现.由于我们前端开发工程师,对HTML5/CSS/JavaScript的网络编程已经相当熟悉了.所以,今天大家将会 ...
- Android/IOS APP界面设计之尺寸规范
1.尺寸以及分辨率 iPhone的界面尺寸不用多说,640*960是基本OK的,也可以是适应5S的640*1136,马上iPhone 6也快来了(随便吐槽一下网上曝的真机谍照,真是丑到离谱...),只 ...
- Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- [修复] Firemonkey 画线问题(Android & iOS 平台)
问题:官方 QC 的一个 Firemonkey 移动平台画线问题: RSP-14309: [iOS & Android] Delphi 10.1 Berlin - drawing proble ...
随机推荐
- Ajax方式上传文件报错"Uncaught TypeError: Illegal invocation"
今天使用ajax上传文件时,出现了错误.数据传输的方式是通过定义formData完成的,提交的文件对象也设置为dom对象,但是还是不能发送请求.F12看到后台报了个错误:Uncaught TypeEr ...
- 关于springboot的日志logging.file和logging.path的配置问题
springboot日志配置 logging.path logging.file 它们俩不会同时生效,so只配置其中一个就好了. eg1: 单独一个path配置 logging.path=E:/lo ...
- 用JavaScript写一个简单的倒计时,可以应用在发送短信验证码的“59秒后重新发送验证短信”
倒计时——从10倒数到0,点击按钮会还原倒计时 <body> <!-- 将textvalue值设为10,从10倒数 --> <input type="text& ...
- Linux下一种高效多定时器实现
Linux下一种高效多定时器实现 作者:LouisozZ 日期:2018.08.29 运行环境说明 由于在 Linux 系统下一个进程只能设置一个时钟定时器,所以当应用需要有多个定时器来共同管理程序运 ...
- 深度学习之卷积神经网络CNN及tensorflow代码实现示例
深度学习之卷积神经网络CNN及tensorflow代码实现示例 2017年05月01日 13:28:21 cxmscb 阅读数 151413更多 分类专栏: 机器学习 深度学习 机器学习 版权声明 ...
- 批量Insert
oracle INSERT ALL ,) ,) ,) FROM DUAL
- kubernetes 实现redis-statefulset集群
Kubernetes 通过statefulset部署redis cluster集群 部署redis集群方式的选择 Statefulset Service&depolyment 对于redis, ...
- 图片样式加hover特效
之前有个尴尬的事情发生,我不知道如何将文字放在图片右边,我想了个麻烦且愚蠢的办法,后来才知道只需要将图片居左就可以达到效果.....不说了看下面 需要实现的效果: 很简单, <img src=& ...
- Flask框架入门
Flask-基本入门 简介 flask被称为微型框架,只提供了一个强健的核心,其他功能全部通过扩展库来实现:也就是说可以根据项目需要量身打造.他适合入门学习以及高手研究. 组成:WSGI.模板引擎(J ...
- 3.MySQL的架构介绍
MySQL简介: 高级MySQL:mysql 内核 sql优化工程师 mysql服务器的优化 各种参数常量设定 查询语句优化 主从复制 软硬件升级 容灾备份 sql编程 完整的mysql优化需要很深的 ...