转自(只讲干货的老张)

面试中经常提问到一个点,就是做手机测试绕不去的点,那就是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区别的更多相关文章

  1. app测试中,ios和android的区别

    App测试中ios和Android的区别: 1. Android长按home键呼出应用列表和切换应用,然后右滑则终止应用: 2. 多分辨率测试,Android端20多种,ios较少: 3. 手机操作系 ...

  2. Tomcat双向Https验证搭建,亲自实现与主流浏览器、Android/iOS移动客户端超安全通信

    紧接着<Tomcat单向Https验证搭建,亲自实现与主流浏览器.Android/iOS移动客户端安全通信>,此处演示下更安全的双向Https认证的通信机制,为了清晰明了,以下进行单独描述 ...

  3. Tomcat单向Https验证搭建,亲自实现与主流浏览器、Android/iOS移动客户端安全通信

    众所周知,iOS9已经开始在联网方面默认强制使用Https替换原来的Http请求了,虽然Http和Https各有各的优势,但是总得来说,到了现在这个安全的信息时代,开发者已经离不开Https了. 网上 ...

  4. React++ node.js ++SQL Sever ++MySQL++ python ++ php ++ java ++ c++ c#++ java ++ android ++ ios ++Linux+

    "C语言在它诞生的那个年代,是非常不错的语言,可惜没有OOP.当项目臃肿到一定程度,人类就不可控了. 为了弥补这个缺陷,C++诞生了.而为了应对各种情况,C++设计的大而全,太多复杂的特性, ...

  5. 用HTML5/CSS3/JS开发Android/IOS应用框架大全

    现在人人都想成为安卓/IOS应用开发工程师.其实,安卓/IOS应用可以用很多种语言来实现.由于我们前端开发工程师,对HTML5/CSS/JavaScript的网络编程已经相当熟悉了.所以,今天大家将会 ...

  6. Android/IOS APP界面设计之尺寸规范

    1.尺寸以及分辨率 iPhone的界面尺寸不用多说,640*960是基本OK的,也可以是适应5S的640*1136,马上iPhone 6也快来了(随便吐槽一下网上曝的真机谍照,真是丑到离谱...),只 ...

  7. Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)

    本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...

  8. Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)

    本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...

  9. [修复] Firemonkey 画线问题(Android & iOS 平台)

    问题:官方 QC 的一个 Firemonkey 移动平台画线问题: RSP-14309: [iOS & Android] Delphi 10.1 Berlin - drawing proble ...

随机推荐

  1. SQL优化记录

    2019.06.19记录: 1.SQL优化的原因: 原因:性能低,执行时间太长,等待时间太长,SQL语句欠佳(尤其连接查询),索引失效,服务器参数设置的不合理(如:缓冲区,线程等) a.SQL: 编写 ...

  2. Python中的幽灵—编码方式

    首先要搞懂本地操作系统编码与系统编码的区别: 本地操作系统编码方式与操作系统有关,Linux默认编码方式为utf-8,Windows默认编码方式为gbk: 系统编码方式与编译器or解释器有关,Pyth ...

  3. CDN内容分发

    什么是CDN内容分发: CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分 ...

  4. JavaScript Basics_Fundamentals Part 1_Variables

    JavaScript Variables JavaScript 变量(Variables)是用于存储数据值的容器. 创建一个 JavaScript 变量,可以使用关键字 let. Example le ...

  5. shake.js实现微信摇一摇功能

    项目要求实现点击摇一摇图片,图片摇一摇,并且摇一摇手机,图片也要摇一摇. 关于用js怎样实现摇一摇手机图片摇一摇,我在网络上找了一些方法,真正有用的是shake.js. 接下来,上shake.js源码 ...

  6. oracel数据泵导出导入

    Oracle11g 使用数据泵导入/导出数据 expdp/impdp 目标:使用oracle数据泵,将A电脑上的数据库databaseA导出后,再导入到B电脑上的数据库databaseB中. A电脑上 ...

  7. Oracle---PL/SQL的学习

    PL/SQL程序 一.定义 declare 说明部分 begin 语句序列(DML语句) exception 例外处理语句 end; 二. 变量和常量说明 a) 说明变量(char,varchar2, ...

  8. linux下Django Nginx+uwsgi 安装配置

    原文链接 在前面的章节中我们使用 python manage.py runserver 来运行服务器.这只适用测试环境中使用. 正式发布的服务,我们需要一个可以稳定而持续的服务器,比如apache, ...

  9. 最简单的SAP云平台开发教程 - 如何开发UI5应用并运行在SAP云平台上

    选择Services Catalog,根据关键字搜索到WebIDE服务,点击超链接打开WebIDE: 进入workspace,选择Git->Clone Repository: 从我的github ...

  10. 【leetcode】617. Merge Two Binary Trees

    原题 Given two binary trees and imagine that when you put one of them to cover the other, some nodes o ...