Android和iOS那个好?
Android和iOS那个好?
应该先往哪个上面投入资源?
多次被人问到此类问题,笔者刚好自己的项目也需要考虑iOS版本。就索性进行了一番调研,于是有了本文(本次不讨论越狱的iOS)
首先从情感上,你喜欢哪个就好,就像百事可乐和可口可乐,当然这个比喻不是很恰当,因为可乐喝起来几乎一样,但是Android和iOS还是有很大差别的。
iOS来源于Apple的OSX,是UNIX系统,OSX已经有差不多10年的历史,从内核底层到软件架构都是逐步发展过来的。iOS使用ObjectivC这个古老的语言来做开发。而Android是Google基于Linux搞来的,严格意义上讲Android并不是一个Linux系统,它没有Linux的xwin,没有glibc,缺乏一整套标准的Linux程序。Android应用绝大部分都是使用JAVA开发,跑在Dalvik虚拟机上(一小部分使用NDK)。 Google在底层也修改了很多东西。Android算是一个全新的操作系统. 所以:
Android使用JAVA,上手容易很多,如果有很好的JAVA Lib加持,开发效率会高些
iOS没有虚拟机, 也没有GC,性能要好一些,当然这个差别会随着Google的改进越来越小
iOS的开发框架很成熟,而且和MAC上通用,同样的知识体系,也可以开发MAC应用,Android相比是全新的框架, 还会继续进化.
iOS和设备紧密集成。软硬件一家公司通吃。但是Android无法做到, 通常的情况是:Google放出源代码。 芯片厂商需要1-3个月来做自己的芯片方案, 手机厂商从芯片厂商处买到方案和代码, 进行自己的集成,定制工作,有时候还需要针对运营商进行定制。 所以:
iOS的设备集成度和驱动优化都是最好的。电源管理一块就可见一斑,而Android厂商就鱼龙混杂。可能排头的厂商的旗舰机器会好些,但是由于Android工期一般都比iOS设备短(请看HTC和三星出机器的速度),所以整体上和iOS比是有差距的。
Android天然存在升级周期延迟的问题, 而且厂商做升级是也是有成本的。卖手机的厂商无法顾及整个生态链,目前这个无解,除非Google做点什么。
由于有多家厂商自己做定制,Android还存在设备的分裂问题(fragmentation), 作为过来人,我告诉你这个是很头痛的事情, 且不论调试时间和人力, 光买一大堆设备的成本就不小。最关键的是它会伤美工/UE的心。
iOS是被Apple严格控制的系统。 在大部分情况下, 第三方应用是无法拿到所有API的。 这意味系统级别的很多功能只有Apple能做(比如打电话,拦截短信)。此外一些涉及用户隐私的API还会导致系统弹出对话框询问用户。 同样第三方runtime做应用开发也是基本不可行的(Flash当初也是被这个条款拒过)。 反过来Android完全不一样,首先Android是开源的,在设计上Android就允许自由替换系统组件, Android也没有强制限制API的情况,(hidden API也可以call,没有人会找你麻烦)。 系统级别的权限是下放到厂商手中,如果厂商愿意给,那第三方开发者就可以做任何事情。 普通应用的权限认证也是在安装的时候就一次性授权完成。 之后不会骚扰用户。所以:
Android平台可以做的事情远远比iOS多, 你可以做电话管理,地址簿,短信管理,可以自己跑后台service。 替换掉系统的组件非常容易
Android平台也可以跑其他系统的Runtime, 比如Flash, 有了NDK, 你要自己接入一个虚拟机也是可能的。Google不会管你
任何人可以拿Android自己改个独立的系统出来,也许这样做的意义和前景有问题,但是同样,没有人限制你
iOS上唯一的下载应用途径就是Appstore,开发者做应用上线还要通过Apple审核,就算通过了,如果挂羊头卖狗肉乱来或者调用了不该用的API, Apple一样随时可以下架。管理非常严格。反过来Android上非常松懈:
厂商可以内置应用。经常会扔一些莫名其妙的软件预装在手机上, 笔者在厂商的时候深刻体会到乱选软件是很好玩的事情。而且我们不会让你删除掉的。
Google的官方菜市场不做应用审核,开发者上传软件很随意,这是个自由市场。
国内还存在大量第三方软件菜市场。以及豌豆夹类似的PC端管理软件。
如果用户选择允许“未知来源”,那么通过web下载或者安装卡上的软件也是可以的。似乎国内用户都是允许的。所以:
iOS上的精品软件多,竞争激烈但管理有序,开发者也容易挣钱。
Android上虽然也有精品软件,但是垃圾软件更多, 甚至有恶意软件。 因为无门槛,基本上软件都是免费,卖不起钱, 大部分都靠广告。
Android还有一堆杀毒软件,这是典型的“没有困难,制造困难也要上”的精神。
Android上还有一堆安慰剂软件,比如能帮你省电的或者是帮你杀后台进程的来提升性能的, 笔者作为做过底层开发的人,笑而不语。
写了这么多分析, 结论呢? 事实上你是什么样的角色,决定了用谁更好。
如果你是普通用户,请关贴, 本文不是用来给普通用户选机的。
如果你是一个个人软件开发者, iOS适合你, 市场规范, 做应用省心。
如果你是一个软件和服务的创业公司, iOS也是适合你做demo的和第一个产品的, 产品靠谱了,用户在用了,有人给钱了,再往Android走也是可行的。 除非你做的应用要涉及硬件或者需要非常高的系统权限, 如果是那样你也只有选择Android。因为国内的厂商肯定要比苹果要容易谈下来。
如果你是一个要做硬件和系统定制的公司, 那么基本上你只有Android可以选。Android的解决方案的成本也在不断下降。
如果你是一个有中国特色的公司,想搞点移动业务玩玩, 还要瞒着用户做很多事情。 那么Android也是更好的, 就算你不作恶, 控制权在自己手中也会方便运作一点。
转载于:https://blog.51cto.com/3387980/1098413
相关文章:
对话谢宝友:搞真正自研的国产操作系统,而不是伪创新
作者 | 郑丽媛责编 | 屠敏出品 | CSDN(ID:CSDNnews)从国外操作系统的长期垄断到中国自主研发操作系统数十年的起落浮沉,技术自主创新独立已成为国产基础软件的主要突破口。近几年间,随着物联网时代的到来,以…

ASP.NET 学习历程
[注意我不推荐高级技术的书,因为你如果是个高手了就可以自己选择甄别书了,此文只对初学者,因为他们此时没有辨别好快的能力,本人几乎买尽所有的.NET书,有好有坏。] 你所看的第一本书对你以后影响最重要!&a…

http头部消息中的cache-control解释
网页的缓存是由HTTP消息头中的“Cache-control”来控制的,max-age:(只接受 Age 值小于 max-age 值,并且没有过期的对象)max-stale:(可以接受过去的对象,但是过期时间必须小于 max-st…

iframe自动调整高度能在IE5里实现吗
偶已经理解到style"height:expression(main.document.body.scrollHeight)"只对第一次显示的内嵌网页有效,如果里面的内容更新必须把主页刷新一遍才能自动适应新的高度,那么惟一的解决办法就是点击链接后整个页面都刷新一次,如何写成…

SQL Server-流程控制 5,Goto 语句
ylbtech-SQL Server:SQL Server-流程控制 5,Goto 语句SQL Server 流程控制中的 Goto 语句。 1,Goto 语句1 --2 -- 1, Goto语句3 -- Desc:Goto语句可以让程序跳转到一个指定的标签处并执行其后的代码。Goto语句和标签可以在程序4 -- 、批处理和语句块中的任意位置使用…
MLPerf基准测试再发榜,浪潮AI服务器刷新18项纪录
近日,全球倍受瞩目的权威AI基准测试MLPerf公布今年的推理测试榜单,其中浪潮AI服务器NF5488A5一举创造18项性能纪录,在数据中心AI推理性能上遥遥领先其他厂商产品。 MLPerf是当前全球最具影响力的AI计算基准评测组织,由图灵奖得主大…

Web充斥着存在漏洞的过期JavaScript库
虽然使用第三方软件库通常会降低开发的时间,但同时也会增加网站暴露出的攻击表面,对此我们应有充分的认识。因此需要保持第三方软件库的最新版本依赖,以便从安全更新中获益。即便如此,一份近期研究表明,在Alexa排名前7…

asp.net实现C#代码加亮显示
以下是代码片段:StringWriter textBuffer new StringWriter();Match match Regex.Match(HTMLStr,"/",RegexOptions.IgnoreCase | RegexOptions.Compiled);if(matchnull){Response.Write(HTMLStr);return;} string codeType match.Groups["codeType…
应用在大规模推荐系统,Facebook提出组合embedding方法 | KDD 2020
来源 | 深度传送门(ID: deep_deliver)Facebook团队考虑embedding的存储瓶颈,提出了一种新颖的方法,通过利用类别集合的互补分区为每个类别生成唯一的embedding向量,无需明确定义,从而以端到端的方式减小emb…

Android大图裁剪解决办法
某些功能需要拍照或者从相册选择照片后经过裁剪再上传的时候, cropp_w_picpath 可以调用手机自带的com.android.camera.action.CROP这个Intent进行裁剪 通过设置输出大小可以得到图片的大小: intent.putExtra(“outputX”, outputX); intent.putExtra(“…

day03-字符编码与转换
1、编码常识 在python 2中默认编码是 ASCII,而在python 3中默认编码是 unicodeunicode 分为utf-32 (占4个字节),utf-16(占两个字节),utf-8(占1-4个字节),所以utf-16 是最常用的unicode版本,但是在文件里存的还是utf-8,…

Asp.Net下的DataGrid的多层表头
先看下表: 业务员地 区 北京上海深圳张三100200300实际上Asp.Net下的DataGrid只不过是一个HtmlTable,只不过在HtmlTable的基础上添加了很多属性、方法,纳入ViewState机制,来生成、控制它;有了这一点认识,事…

Selenium的延迟等待
2019独角兽企业重金招聘Python工程师标准>>> Selenium的延迟等待分为 显式等待(Explicit Wait) & 隐式等待(Implicit Wait). 1.显式等待 显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到…
瞧瞧,这样的代码才叫Pythonic
来源 | Python编程时光(ID: Cool-Python)Python由于语言的简洁性,让我们以人类思考的方式来写代码,新手更容易上手,老鸟更爱不释手。要写出 Pythonic(优雅的、地道的、整洁的)代码,还…

linux基础(一)安装系统Centos6.5
安装有常用有:远程网络安装、U盘安装、光盘安装三种方式,以下为光盘进行安装1.出现引导界面,选择安装或升级现有系统,选择第一个安装系统。Install or upgrade an existing system 安装或升级现有的系统 install system with basi…

使用 .NET 对事件进行编程
作者:Ted Pattison 您可能已经对事件进行编程若干年了,但是迁移到 .NET Framework 仍然需要您重新检查事件的内部工作,因为 .NET Framework 中的事件位于委托的顶层。 对委托的了解越多,对事件进行编程时所具有的驾驭能力越强。 开始使用公…

tomcat项目自动发布脚本.脚本运行效果
./update -------------------------------------------------------------- | 确定特定用户执行,否则退出 | -------------------------------------------------------------- Yes,we are the user of testtomcat --------------------------------------------------…
11.11大促来袭,京东如何保障云安全?
2020年4月,国家发改委首次就“新基建”概念作出正式解释。云计算被纳入信息基础设施中的新技术基础设施。据IDC统计,2019年全球云计算基础设施规模超过传统IT基础设施,占全球IT基础设施的50%以上。云计算发展势如破笋,云计算也成为…

分享Kali Linux 2017年第11周镜像文件
分享Kali Linux 2017年第11周镜像文件 Kali?Linux官方于3月12日发布2017年的第11周镜像。这次维持了11个镜像文件的规模。默认的Gnome桌面的4个镜像,E17、KDE、LXDE、MATE、XFCE桌面的各一个,手机版的包括ARMEL和ARMHF。有最近要安装Kali?Linux系统的&…

实现无刷新DropDownList联动效果
在做一个文章添加功能时,想在选择大类后,自动将其所属二级小类显示出来,使用DropDownList的SelectedIndexChanged事件可以很容易实现,但每次选择后页面总要刷新一次,让人感觉很不爽。为实现DropDownList无刷新二级联动…
偷天换日,逼真的天空置换算法
责编 | 晋兆雨来源 | Jack Cui头图 | CSDN付费下载于视觉中国前言天空,是摄像中的一个关键元素。游戏的天空,我们可以随意调节,可以是晴空万里,也可以是风雨交加。现实的天空,我们也可以使用算法进行调整,算…
office2003/2007/2010版本降低宏安全设置方法
如果在公司内部环境中,因为各种系统对Office环境的要求,需要通过降低Office宏安全性的方法来提高系统访问效率的话,可以参考一下方法设置。 Office2003所需的设置如下: 1、打开Office2003,选择"工具"&#x…

【WEB API项目实战干货系列】- API登录与身份验证(三)
上一篇: 【WEB API项目实战干货系列】- 接口文档与在线测试(二) 这篇我们主要来介绍我们如何在API项目中完成API的登录及身份认证. 所以这篇会分为两部分, 登录API, API身份验证. 这一篇的主要原理是: API会提供一个单独的登录API, 通过用户名࿰…

ASP.NET中的页面指示标识
页面指示标识 的功能是用来确定在处理aspx文件的时候,需要系统做一些什么特殊的设定?它的语法是:<% directive attributevalue %> 比如:<%import namespace"System.Data"%> 注意属性之间需要空格&#…

⑨③-不能浪费拥有的年轻资本
⑨③-不能浪费拥有的年轻资本 老男孩语录⑨③-不能浪费拥有年轻资本 万两黄金易得,年轻资本难求! 同学们,我们不能浪费比万两黄金还贵重的年轻资本,因为,转眼间你就不再拥有这个资本了, 趁着年轻࿰…
滴滴AI语音团队获国际顶尖智能对话系统竞赛世界第一
出品 | AI科技大本营头图 | CSDN付费下载于视觉中国近日,在国际顶尖人工智能竞赛第九届对话系统技术挑战赛(DSTC9)中,滴滴语音和NLP技术团队参与端到端多领域面向任务型对话系统任务荣获世界第一,充分彰显滴滴公司在自…

RHEL5+PXE+DHCP+Apache+Kickstart安装RHCE5.1 i386实验室环境
此博文出自:http://andrewyu.blog.51cto.com/1604432/1100567 使用RHEL5PXEDHCPApacheKickstart安装RHCE5.1 i386实验室环境,根据文章内容也可批量安装了红帽RHEL系统或CentOS5.x,现阶段,由于需要大规模应用CentOS5.8 x86_64系统用…

用ASP.Net(C#)连接Oracle数据库的方法
今天看了一下asp.net连接oracle数据库的方法,得到了如下代码。这段代码打开了MyTable表,并把操作员的名字列出。字段类型是OracleString。读取的时候用的是字段编号,我不知道怎么使用字段名来读取某字段的内容。下面是代码://首先…
NLP任务中的文本预处理步骤、工具和示例
作者 | Viet Hoang Tran Duong来源 | DeepHub IMBA头图 | CSDN付费下载于视觉中国数据是新的石油,文本是我们需要更深入钻探的油井。文本数据无处不在,在实际使用之前,我们必须对其进行预处理,以使其适合我们的需求。对于数据也是…

github设置添加SSH
https 和 SSH 的区别: 1、前者可以随意克隆github上的项目,而不管是谁的;而后者则是你必须是你要克隆的项目的拥有者或管理员,且需要先添加 SSH key ,否则无法克隆。 2、https url 在push的时候是需要验证用户名和密码…