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 ...
随机推荐
- 【剑指OFFER】链表中倒数第k个结点
[问题描述] 输入一个链表,输出该链表中倒数第k个结点. 时间限制:1秒 空间限制:32768K [AC代码] p先走k步,q再走,这样p和q的距离就是k了,等p走到尽头,那么q自然就到了倒数第k个位 ...
- spring cloud链路追踪组件sleuth和zipkin
spring cloud链路追踪组件sleuth 主要作用就是日志埋点 操作方法 1.增加依赖 <dependency> <groupId& ...
- print() 默认是打印完字符串会自动添加一个换行符
可以使用end=" " 参数告诉 print() 用空格代替换行 for i in range(1,10): ... print(i,end=' ') ... 1 2 3 4 5 ...
- SQL Server循环插入
一个SQL循环插入的代码,运行正常: BEGIN DECLARE @idx AS INT; DECLARE @NodeName nvarchar(255); DECLARE @OtherName nv ...
- getContextPath、getServletPath、getRequestURI、getRealPath、getRequestURL、getPathInfo();的区别
<% out.println("getContextPath: "+request.getContextPath()+"<br/>"); ou ...
- java中的exception stack有时候不输出的原因
有时候,我们在看java错误日志时,只看到一个java.lang.NullPointerException,却没有看到错误的栈,原因是启动时候有一项参数可以选择配置:OmitStackTraceInF ...
- 实例详解jQuery的无new构建
jQuery的无new构建 jQuery框架的核心就是从HTML文档中匹配元素并对其执行操作. 回想一下使用 jQuery 的时候,实例化一个 jQuery 对象的方法: // 无 new 构造 $( ...
- volatile 关键字(修饰变量)
目录 volatile 关键字(修饰变量) 1. 含义 2. 作用 3. 如何保证可见性 4. 如何禁止指令重排序优化 5. volatile 是不安全的 6. volatile 不适用场景 vola ...
- C#应用笔记
1.ref关键字.out关键字——引用传递参数 2.什么时候用DateReader,什么时候用DateSet呢? 3.is操作符.as操作符的使用 4.Eval方法和Bind方法的区别 5.Serve ...
- H5的本地存储(localStorage)和cookie比较
HTML5 的 web Storage 存储方式有两种:localStorage 和 sessionStorage. sessionStorage就像是会话级别的cookie,数据会随着浏览器关闭而清 ...