Android应用java应用层性能优化化的成本比iOS要高吗

如何做一个有高性能混合开发iOS/Android应用? - 知乎251被浏览<strong class="NumberBoard-itemValue" title="4分享邀请回答292 条评论分享收藏感谢收起0添加评论分享收藏感谢收起HTML5实现APP和原生方式有多大差距,多少坑? - 知乎543被浏览<strong class="NumberBoard-itemValue" title="6分享邀请回答11421 条评论分享收藏感谢收起zsxsoft.qiniudn.com/upload_images/5.gif其次,是 DOM 性能问题。感谢 React 带来了 Virtual DOM,部分解决了局部区域 DOM 刷新时的性能问题。不过,一旦涉及到较大区域 DOM 更新,反倒有更大的性能损耗(最终计算出来的结果还是要全部替换掉,多做了一步 Diff )。因为性能问题,Facebook 2012年离开了 HTML5 App 阵营()。但时至今日,还是没有什么改善。也分享一篇文章,可以看看坑:。这里有个例子:微众银行 App 是 Cordova + Ionic + Angular。2. 兼容问题先只算官方系统。Android系统的 WebView 一般随 Android 版本更新(当然,也可以自己去 Play Store 更新),每个版本所支持的功能均不同。坑的是,在国内的环境下,基本不会再更新了。有的功能,在 PC 上对应版本的Chrome 是有的,到该版本 WebView 就没有了。比如说,XMLHttpRequest 的 onprogress 在 Android 4.0.4 上不被支持。于是,针对这类系统,只能采用像之前对 IE 的 Hack 一样,用 iframe 来替代进度条。再比如说,ECMAScript 6 被高版本 WebView 支持。如果开发者写惯了后,引入了 Symbol 等,又忘记了 polyfill 。在低版本 WebView 就会出错。就像我这样:接着呢,感谢 ROM 厂商乱改系统自带的 WebView ,从而导致在各种小细节上不同手机的显示效果或运算结果不同。更倒霉的是,有的甚至还会全页面混乱。怎么解决?个人认为,像微信那样自带一个 X5,也许算是一个解决方案吧。至于兼容问题的例子,还是微众银行好了: (与新版 iOS 9 的 WebView 不兼容)3. 调试问题先吐槽:Android 5.0+ 的系统内的 WebView ,可以用 Chrome for PC 来调试。但需要翻墙。调试分调试 JavaScript 和界面两方面。JavaScript 方面,如果 throw 出一个错误,很可能剩下的事情你都干不了了。手机端的表现就是什么操作都没用,也不会崩溃退出之类。在开发时,对于 JavaScript 报错,MUI 和 Cordova 均可以通过 adb logcat 来检查报错;Release 后可就没办法找用户连 USB 了。weinre 等工具对于 JavaScript Debug 没啥用。那 weinre 干啥用?只是让你看 DOM 层级或动态执行代码罢了。这就是 UI 方面的调试了。这部分的话,考虑到兼容问题,自求多福吧……Cordova 提供了 Ripple,倒的确是一个很不错的解决方案。但是并不能涵盖所有的手机……4. 代码安全性问题正如.apk -& .dex -& .jar -& .class -& .java一下就能把代码全部拿出来看一样,.apk -& .js 更为方便,解压一下就好了。于是,在 Release 前,必须 gulp / grunt 构建工作流,把 uglify 之类全部一股脑塞进去。这部分和做网页前端没啥区别,差别大概只有不需要考虑代码切分等(毕竟没有网络,全在本地)。然而,这样的代码,修改成本非常低。比如我做一个付费的本地游戏,只要简单地修改一下.js,轻轻松松破解验证等后重新打包回去,破解版游戏就做好了,比 Java 的简单多了。就算有 C++,我 js 不调用你,你又奈我何?没有服务器验证的话,玩蛋去吧。5. 功能问题如果没有 Native Code,一切HTML5 App都是空架子。所以,Java / Objective-C / C#仍然是必须学习的语言;Native App 如何开发也仍然是必修。比如以下代码,就是在 MUI 里用原生浏览器打开一个链接。function openInBrowser(originalUri) {
var Intent = plus.android.importClass("android.content.Intent");
var main = plus.android.runtimeMainActivity();
var Uri = plus.android.importClass("android.net.Uri");
var uri = Uri.parse(originalUri);
var intent = new Intent(Intent.ACTION_VIEW, uri);
main.startActivity(intent);
当然,Cordova 就得写 plugin 了,更为繁杂。大概就是这样 _(:з」∠)_ 求轻喷。(话说我tm在复习呢写答案合适么?!)4712 条评论分享收藏感谢收起为什么 Android 的机器主频和核心数比 iPhone 高,却没有更流畅? - 知乎<strong class="NumberBoard-itemValue" title="被浏览<strong class="NumberBoard-itemValue" title="5,679分享邀请回答1.5K218 条评论分享收藏感谢收起375 条评论分享收藏感谢收起iOS App 整体性能优化 - 简书
iOS App 整体性能优化
性能优化是一个大的问题,所以首先是需要把这个问题分而化之,把它分解成一个个影响app性能的小问题才能进行回答,所以在这里做出一些整理来回答这个问题,同时也提醒自己再次遇到如此大的问题时学会分析问题的本身以及从哪些方面去回答这些问题。
影响app性能的几个问题有:
1. 网络性能
网络性能优化涉及到DNS解析,路由算法,以及服务器端性能,不是很了解,可参看一下文章:
2. 内存问题
在MRC时代,手动释放内存会导致大量内存的泄露。但是在ARC时代解决了大部分的内存泄露,但是仍然会出现内存泄露的问题:
1. 循环引用
2. Core Animation对象手动释放
3. UIWebView内存泄露
一些详细介绍如下:
3. 主线程阻塞
所有的用户输入和UIKit的渲染是在主线程执行。所以要保证app的流畅度就一定不能阻塞主线程,把可以在子线程中做的事放到子线程中来减少主线程的计算与处理。
假如在主线程中执行如下操作:
1. 网络同步请求
2. I/O操作
3. 大量运算
因为需要处理的多所以会阻塞主线程,导致卡顿,因此要减少主线程中耗时的操作,使用多线程(NSThread、NSOperationQueue, GCD)来处理这些。可以查看关于多线程的介绍。还有主线程关于渲染的处理会影响效率,所以这一块也是需要处理的。
4. Offscreen rendering(离屏渲染)
离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。离屏渲染意味着你App的部分区域每一帧渲染了两次。所以会造成一定的性能损失。
对于UIView或者CALayer的frame,bounds,transform等属性的改变,消耗的资源远大于他们其他的属性改变。
可以参考以下文章:
5. 图片的处理
通常会用imageNamed:来加载mainbundle中的图片,此函数会缓存加载的image。因此,对于那些被重用的图片,这个API很高效。但是对于那些使用很少的图片,用这个就很耗内存。
所以在加载使用一次的应用图片时使用initWithContentsOfFile:函数,而在加载多次使用的图片时就使用imageNamed:函数。例如加载引导页的图片时使用载入路径的方式,而使用通用的背景图的就使用imageNamed:的方式。
//使用路径方式载入图片
NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:fileType];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:path];
//使用图片名的方式载入图片
UIImage *image = [UIImage imageNamed:fileName];
//读取本地图片的 和imageNamed一样,但是性能比后者要强很多,两个参数,前面一个是 文件名,后面一个是类型
#define LoadImage(_pointer) [UIImage imageNamed:[UIUtil imageName:_pointer]] //可以用来直接传图片名字
#define LoadImageWithType(file,ext) [UIImage imageWithContentsOfFile:[[NSBundle mainBundle]pathForResource:file ofType:ext]]
一般的优化技术就是在减少内存使用,减少主线程业务处理,用空间来换时间等等,基于这些策略及技术考虑来选择优化方向。
以下是iOS的一些细节优化策略
避免对UIView使用透明。(UIView默认是非透明)。原因是透明对性能要求较高,如果在滚动时页面比较复杂,体验上的差异会相对明显。
避免过于庞大的xib。(如果不得不使用一个ViewController作为xib,也应该将其其中的子视图拆成小的xib)。
需要注意的是,当你加载一个XIB的时候所有内容都被放在了内存里,包括任何图片。如果有一个不会即刻用到的view,你这就是在浪费宝贵的内存资源了。Storyboards就是另一码事儿了,storyboard仅在需要时实例化一个view controller.
不要阻塞主线程。
使图片符合UIImageView的尺寸。不要在运行的时候再让UIImageView自行压缩,因为这样会降低运行时的性能。(注:手动压缩图片的方法,在context中使用drawInRect)
选择合适的collection,数据结构决定了算法的效率。 如:Array使用下标查找较快,但插入和删除较慢。set进行插入和删除很快。
使用缓存,因为数据具有时效的,所以对于时效性要求不高的数据完全可以使用缓存来保证快速显示。例如URL对应的图片缓存(SDWebImage),通过数据库活core Data来保存不需要变动的数据,UIWeb的缓存等都属于这种。
处理低内存警告。在收到内存警告时,清除对cache的强引用,没有当前显示需要的image,以及一些其他可以再创建的对象。
重用一些高消耗的对象,如NSDateFormatter、NSCalender等。解决方法:可以将其作为property、甚至是静态变量作为单例在APP中使用。并且,NSDateFormatter的 setDateFormate也是非常消耗资源的一个操作。
网络传输过来的数据,往往是json或xml字符串。直接将这些字符串转换成我们需要的数据结构(自定义类或者NSDictionary),避免后续使用的时候还要做数据结构转换产生不必要的消耗。
设置UIView的背景图片时,如果是整幅图,就采用addSubView一个UIImageView;如果是要重复平铺一个小图,就使用colorWithPatternImage,因为这个函数的设计上就是针对小图的,如果用于整幅大图来做背景,反而会消耗更多内存。
在临时创建大量对象时,使用NSAutoreleasepool,例如,一个循环用于创建包含多个对象的数组,在循环体内,即可使用@autoreleasepool包裹创建代码。使用系统的@autoreleasepool会有延迟,内存不会马上释放。
对于排版复杂的文字或者图文混排,使用CoreText技术。(而不是一味地堆UILabel)
在对渲染的效率要求较高的页面中,避免使用UILabel、UITextView等在主线程中进行排版和绘制的控件。应自定义文本控件,用TextKit或者CoreText进行文本异步绘制。另外,还有facebook的AsyncDisplayKit框架可以采用。
将绘制图像放在次线程中执行,如在次线程中使用 CGContext进行画图,在主线程中 layer.contents = img。
图片和视图的大小避免超过,因为这是目前iphone5到iphone6p以及ipad仅仅通过GPU就直接处理的纹理尺寸上限,否则就GPU就会提交CPU先处理,这样开销很大。
减少视图或者layer的层级数量,在有多个层级时,可以将多图合并成一张图,再渲染显示。
电量消耗:减少耗电与流量的操作。GPS在获取用户位置之后,就进行关闭,因为它非常耗电。
关于后台运行。进入后台后,即尽量减少内存占用、释放所有的共享资源(如Calender或address book),因为iOS会kill后台中内存消耗最多的或者进入后台还占用共享资源的进程。
参考文章:
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
用到的组件1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好...
Java 基础思维导图,让 Java 不再难懂 - 工具资源 - 掘金思维导图的好处 最近看了一些文章的思维导图,发现思维导图真是个强大的工具。了解了思维导图的作用之后,觉得把它运用到java上应该是个不错的想法,这样回顾知识点的时候一目了然,快速知道自己的短板。 思维导图...
发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注
09:45字数 61697阅读 3316评论 2喜欢 85 用到的组件 1、通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FM...
有的时候,选择比努力重要!一个好的选择可能比你努力一百天更有效!可是,有了好的选择,不努力,却又是万万行不通的,只有好的选择加上不懈的努力,成功才会来的更快,更持久!
里面包含了证书创建、上线前的资料填写等等一套完整的流程。 http://blog.csdn.net/zgxiaojian/article/details/ http://www.jianshu.com/p/0 Xcode 打包 ipa ...
题纲: db.collection.find()/findOne() 问与答 问: 有办法查询字段值为null的文档吗?答:没有。查询运算符处理null值的方式各不相同。例如,如果您使用字段null(如{name:null})进行查询,这将返回name = null的文档 ...
本文由作者冷爱所写,欢迎分享到朋友圈。如需转载,请与我们联系并获得作者本人许可,任何未获得作者授权的转载均为侵权。联系方式:dinglin@pv.cc 女生自述 关键词:出轨你好,冷爱,我老公出轨了,跟一个年龄比他大点的老女人。我微信发现的当天晚上,他说,既然你看见了想怎么...
“美”字笔画不多,但认识它的人很少,我的人生上半段就是属于这样的人,走得太急了错过与绚烂晚霞相遇的时光,而今放慢脚步,经常独自一个人坐在江湖边看日头西沉,认识瞬息万变的美。
邕江边,河水悄悄地东流,蜻蜓群飞乱舞,秋蝉叽啾咽鸣!一轮红亮的落日褪去了云霓衣服,露出了它魔幻百...别再争了 告诉你iOS比Android好在哪
日 00:01&&&出处:&& 作者:宋海健&&
  泡泡网手机频道11月28日 “买iPhone就为了装X”、“苹果有什么好的?那么贵也要买,虚荣!!!”、“苹果手机传文件都费劲,真不明白iPhone到底好在哪”...不知道苹果iPhone用户是不是会经常被人有意无意的调侃呢?其实对于安卓手机与苹果手机争议最多的是它们搭载的系统,而Android与究竟哪个好已经争论了几年了,甚至有文章专门列出了《安卓痛扁iOS系统好的几个理由》,文章的观点其实并没有错,但事实上iOS同样有Android目前无法企及优势。  本文只讨论iOS与Android系统级,并不涉及手机外观、工业设计和其他部分。  一、流畅性碾压性优势  由于Android系统采用了虚拟机的运行机制,这就需要消耗更多的系统资源了运行App,即便升级到Android 4.X,甚至Android 5.X,系统流畅性还是不如iOS。iOS无论是桌面滑动、App的内部操作,屏幕与指尖都似乎带有“粘性”一般,这就使得手指触控到哪里,屏幕就会马上指向哪里,而Android呢?看似已经媲美了iOS的流畅,但只是媲美,多数还是不及iOS流畅,即便Android的触控延迟只有0.1秒其实就已经分出胜负了。  这里的流畅并不是指手机应用的打开速度、关机速度。流畅指的是运行速度、触控速度,因为这才是最直观的影响用户体验部分。以笔者手中使用的为例,自2012年使用至今从未刷机,系统依然流畅不卡,而反观与同时期的Android系统手机......  二、iOS系统的软件App多优先升级  并不是软件升级快就代表好用,但至少软件升级可能会为我们带来额外的功能体验,拿最近的微信举例,苹果iOS系统优先升级并推出了朋友圈的“小视频”功能,而Android系统则多等了几个星期的时间。绝大多数主流的应用软件都以iOS系统开发升级为优先级,只有少数未通过苹果审核上架、或特殊应用才会在Android先放出。  说到软件App方面为何iOS系统升级快,这得益于苹果有一套独特的与开发者分享收入的计划,有了利益关系,这能够让开发者更加有动力、更积极的开发和升级应用。而谷歌虽然也为Android开发了专属的应用商店,但在国内的环境下国人使用的并不多,况且升级速度并不快,体验尝鲜还要遥遥无期的等待。  三、iOS游戏不要数据包,Android玩大型游戏很麻烦  iOS的游戏直接通过官方App Store或在后通过各种第三方助手安装即可,这期间除了部分老旧设备可能出现不兼容的游戏外,其它均完美被支持,没有游戏数据包一说。而Android玩家,如果要下载一个大型的游戏,必须要通过安装游戏主程序+额外下载几百MB不等的数据包才行,如果是主流的高通还好,但凡碰到非主流的的话,那游戏数据包可能就遥遥无期了,开发者心情好的话会为CPU做适配,否则就只有无限等待或移植的命运。   注:Android系统的大型游戏,需要在安装游戏之后再下载数据包,数据包会针对手机的处理器以及GPU专门优化,如果选择了没有经过优化的数据包,可能出现无法运行或者贴图错误等情况。iOS系统则是在下载游戏的时候一同下载数据包,不存在单独下载的情况。所以相同的一款游戏,Android系统可能只有几十M的大小,而iOS则达到了1G以上,这就是因为Android没有数据包而iOS包含了数据包。  再者,iOS目前的分辨率只有5种左右,而Andorid则大大小小的包含了近10种左右,再由于盗版或开发者利益关系原因,开发者更倾向于对iOS优先适配。同时,游戏的质量(包括画面精美程度、触控流畅性等等)整体也要高于Andorid系统。或许有同学说Android打开游戏的速度要快于iOS,笔者想说,玩游戏是比打开的速度吗?  四、小偷即使偷走也不会泄露隐私  自从iOS 7系统之后,苹果增加了安全保护机制,即如果进行二次刷机或强行开启手机的锁屏密码,必须要输入原有的Apple ID的密码进行解锁才行。我们不能防止手机被偷,也不指望被偷后能够找回(虽然可以定位,但是否可以找回完全凭自己本事。),但至少可以保证我们手机内的资料或隐私不被居心不良者窃取。小偷拿走手机后最多当配件廉价的卖掉。  Android系统虽然同样有密码保护机制,但相比苹果而言就要逊色一些,稍微懂点的人只要进入Recovery后,就能刷机或清理数据,手机的密码形同虚设了。虽然有少部分手机做到了二次加密,但大多数的Android系统在这方面还是比较脆弱。  注:Recovery模式指的是一种可以对安卓机内部的数据或系统进行修改的模式,也叫工程模式(类似于windowspe)。在这个模式下我们可以刷入新的安卓系统,或者对已有的系统进行备份或升级,也可以在此恢复出厂设置。  五、更省电、功耗控制好  系统机制的不同导致了Android会占用更多的资源来支撑系统运行,官方宣称的3000毫安时电池实际使用也不过一天的时间,而iOS系统的iPhone虽然看似电池容量不高,但得益于精心优化,它在待机耗电大约只有Android系统的30%左右,使用耗电更是只有25%-75%。  iOS系统采用独立唤醒技术,以及为处理器量身定制的芯片,在待机时更省电,使用时的耗电详情呈“线性”趋势。虽然有部分Android手机续航强,但多为高容量的电池,并且使用长时间后,由于系统或电池的原因,更是会出现“跳电”的现象。  六、没有强迫症根本不用清后台  “不清理后台会很费电”、“不清理后台会很卡”......反正也不知道什么时候起,手机清理后台就成了必须要做的了,至于原因就为了亮点,不卡、省电。不过这只对Android系统有效,iOS系统完全没有清理后台的操作,同样耗电、流畅性也不会被影响。    怀疑笔者说的不对?自己试试看就知道了。至于有些同学说两大系统真假后台的问题,这个就仁者见仁了,没有人敢说Andorid的后台机制最好,也没有人保证iOS的后台机制更适合。  七、iOS更稳定不易死机  许多问题我们虽然不想承认,但却是客观存在的事实,下至低端入门、上至旗舰顶配,Android系统在长时间使用后,都会或多或少出现些不稳定现象,比如最不能忍的死机现象,可换电池的手机还好,扣个电池就恢复了,但不可拆卸的电池手机就只能等待重启或长按关机键恢复了。  iOS也会死机,但相比较之下出现死机的几率要少很多。  八、综合实力最好的影像系统  目前搭载iOS系统的设备最高规格的摄像头为800万像素,但即便是这样,凭借iOS系统的精心优化,它仍是目前智能手机中综合体验最好的手机之一(包括对焦速度、成像速度、成片速度、成片率、多场景拍照等综合而定)。而搭载Android系统目前已经达到了2070万像素级别,感光原件甚至更好,但拍照的综合体验来看,iOS的优势依旧明显。  最新的iPhone6 Plus搭载了光学防抖特性,并且采用了先进的相位对焦技术,拍照体验更是有明显的提高。iOS在视频拍摄方面也同样具有优势,尤其对视频拍摄时的防抖处理的十分到位,再搭配iMovie等专属视频处理软件,让它比Andriod更具有优势。  九、双核战8核  由于iOS高度整合、优化、封闭性,让它无论是在各方面的表现十分优异,其中最值得欣慰的一点目前的iOS系统有着自己的一套生态体系,即便是使用双核处理器,配合定制的GPU处理单元,在综合表现来看同样不输Android,要知道现在8核处理器已经不足为奇。  总结:  虽然笔者列举了9项iOS相比Android的优势,但同时也并不否认iOS还存在许多可以学习改进的地方。而对于许多功能性的东西,笔者并没有将越狱的范畴考虑在内,如越狱后iOS能实现比现在更多更好的功能体验。  其实,争了几年了,都说自己的系统好用,但事实上两大系统各有优劣势,谈不上哪个系统最好。iOS系统优势慢慢的被追赶,Android的多样性逐渐被整合,这一切都是时间的问题而已,好与不好这都是相对的。对于我们普通使用者来说,哪个系统最好不重要,适合自己最重要。但至少从目前来看,iOS系统的系统级体验,还是需要Android来积极学习的。■
屏幕尺寸:4英寸 CPU核心数:双核 操作系统:iOS7 后置摄像头:800万像素 运行内存(RAM):1GB 电池容量:1440mAh 机身存储(ROM):16GB
扯扯车精品文章推荐}

我要回帖

更多关于 c 应用程序性能优化 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信