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 ...
随机推荐
- java中拦截器与过滤器之间的区别
过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法u ...
- 西安区域赛 D.Miku and Generals 二分图+背包
Miku and Generals Describe "Miku is matchless in the world!" As everyone knows, Nakano Mik ...
- 剑指offer42:数组和一个数字S,输出两个数的乘积最小的
1 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. ...
- Linux 多命令语句与重定向
多命令语句 Linux中我们在shell输入命令一般是一条一条执行,但是我们同样可以用一行语句写出多命令,下面就举出几个常见的方法 “;”分号用法 方式:command1 ; command2 用;号 ...
- python — 函数基础知识(二)
目录 1 返回值 2 作用域 3 函数小高级 4 函数中高级 1 返回值 def func(arg): # .... return 9 # 返回值为9 默认:return None val = fun ...
- 牛客 P21336 和与或 (数位dp)
大意: 给定数组$R$, 求有多少个数组$A$, 满足$0\le A_i \le R_i$且$A_0+...+A_{N-1}=A_0\space or ...\space or \space A_{N ...
- 怎样终止HTTP请求
使用 xhr.abort() var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://www.example.com/page.php', tr ...
- jvm常用命令
jps // 查看Java进程ID和main方法类名 jstack <进程ID> // 查看该进程的所有栈信息 jstack -l <进程ID> // 查看该进程的所有栈信息, ...
- react快速上手二(使用JSX语法)
前提: 下载依赖,配置 cnpm i babel-preset-react -D JSX语法的本质: 还是以 React.createElement 的形式来实现的,并没有直接把 用户写的 HTML代 ...
- Mysql(五):索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...