分享

Android 的屏幕滚动操作不如 iPhone 流畅顺滑,是什么原因导致的? |

 pgl147258 2014-07-21

【pansz的回答(88票)】:

这是应用设计水平问题。

Android里面什么渣应用都能过审核都能上架,所以开发商通常不自觉的降低了对Android应用性能的优化。实际上只要用心优化,Android应用一样可以很跟手,只不过大多数产商没动力做而已。

亲儿子装google原生应用是很称手的,一部分对Android很认真的开发者也开发出了在Android下体验很好的应用。…………只不过这些开发者一般就没怎么在意iOS版本而已。

开发者的能力是有限的,倾向性是明显的,ios版做得好的应用,Android版本经常不认真做,而Android版做得好的应用,iOS版很可能没有或者很简陋。

【FedericoMo的回答(21票)】:

这不是嘴里说说是“应用水平设计问题”就一定是“应用水平设计问题”的。

首先看一段视频,iPhone 4(2010年)与Nexus 4的(2012年)的scroll test。抱歉没有找到更新机型的用高速摄影机拍摄然后慢速回放的对比。

youtube原地址https://www.youtube.com/watch?v=HrmxEo16mVo

优酷地址(密码123456)

Nexus 4 vs iPhone 4 Scroll test http://v.youku.com/v_show/id_XNzQzMzgwNDc2.html

明显可以看出,从手开始上下滑动到页面开始滚动,Nexus 4上手指移动的距离更大,比iPhone 4晚一拍。这就是楼主说的不跟手现象。这是主管感受。再来看看客观测试是不是与主观感受一致。

请看TouchMarks I: Smartphone Touchscreen LatenciesTouchMarks II: Touchscreen Latencies in Flagship Tablets

可以看出,即使是2010年的iPhone 4,也比2013年的Android和Windows Phone旗舰机屏幕反应速度快,而iPhone 5更是快了1.5倍。iPad mini和iPad 4,更是比Nexus 7 2013版快了1.5至近2倍。可以看出,即使是2010年的iPhone 4,也比2013年的Android和Windows Phone旗舰机屏幕反应速度快,而iPhone 5更是快了1.5倍。iPad mini和iPad 4,更是比Nexus 7 2013版快了1.5至近2倍。

关于为什么更快,该网站给出的原因可能有两个:

  1. Apple’s touchscreen hardware is better optimized or more sensitively calibrated for capturing and processing touch. 苹果对触摸屏的优化更高,对于捕捉和处理触摸更敏感。

  2. While the Android and WP8 code are running on runtimes (Dalvik and CLR respectively), the iPhone code is written in closer-to-the-metal Objective-C, which may reduce some latency. 虚拟机和更接近底层原生的对比。
不管原因如何,给消费者的体验就是“the best written apps on iPhones will simply feel more responsive than similar apps on the current gen of Android devices”,相似的app(前提是编写良好)在iPhone上的表现就会比在Android机器上更灵敏。

【何明涛的回答(15票)】:

咱觉得这版微博优化还行,硬件加速、图片延迟加载都有,我手边三年前的机器都能跑到满帧。题主可以去下个 FPS Meter(测帧数的,需要 ROOT 权限,MIUI 需要允许悬浮窗),然后再去刷你的微博,滚动时右上角接近 60FPS 的话,@Draco Leo 的答案就很可能是最符合你的提问的 —— 问题在于手机屏幕调教,而不在 App 开发者。

其实只要是触屏,都肯定会有轻微的延迟。可以尝试在开发者选项里把「显示触摸操作」打开,然后手指在屏幕上画圈,不需要很快 —— 如果完全没有延迟的话,圆点就应该可以一直被手指遮住 —— 但实际上,无论是什么 Android 设备,一定可以看得到指示触摸的圆点。

以及,在满帧情况下的这种「滑动不跟手」,还有可能是软件本身就是这么设计的滚动算法 —— 比如有几个版本的 Sense 里自带相册的缩放和滑动都不跟手得很夸张;比如在 GO 桌面的设置里,你可以把滑动速度调到最慢,就会发现虽然流畅依旧,但明显不跟手;又比如 Wacom 的「卷动」,也是可以按个人喜好,使滚动视图完全不跟手(更快或者更慢)。

对于电容屏而言,屏幕采集到手的「轨迹」,其实是一系列连续的点。如果在 Android 的开发者选项里打开「指针位置」,快速地在屏幕上划一下(划完后手指离开屏幕),在末端会看到有轨迹不止一条:

蓝色那个就是屏幕采集的实际轨迹(可以看到是几个点连接成的),紫色的是推算的「手指离开屏幕」过程的平滑轨迹。// (由于看不出轨迹随时间的变化过程,这个并不能解释滚动视图不跟手的现象。)

显然,无论是哪个次元的算法,不经过几个采集周期,就无法得到红色的平滑曲线。滚动要做到平滑流畅,也是要对多个采集点上的速度做平均,所以某种意义上,完全的「跟手」是不存在的 —— 只不过是 iOS 设备的软硬件都足够优秀,这一过程处理得足以让人的感官认为是「跟手」的。

类似这样的「考虑到硬件采集的触摸轨迹本身不平滑,于是延迟一段时间来算平滑轨迹」的设计还有——

【阳光与萝卜的回答(7票)】:

测试流畅度,其实可以试试这个

可以试着滑动各种应用,下面的波浪越高,说明越卡。 可以试着滑动各种应用,下面的波浪越高,说明越卡。

至于其他的就不多说了,我只知道Nexus5 4.4.4+ART流畅度一点都不弱于5s。

【方振宇的回答(9票)】:

其实我觉得最主要还是开发者对于应用的优化不够,太多的Overdraw和Layout方面的问题,Android开发者本身为了适配屏幕分辨率和解决其他一些兼容性问题已经耗费很多精力了,很少有开发者会花很多精力去做细致的性能优化,有的甚至连优化的方向都不知道。现在的官方微博客户端要我看在Overdraw方面还是很严重,然后在异步加载图片的时候帧率也不够稳定,算不上流畅。再则由于Android平台本身机能没有强大到优化烂的应用也能跑的非常流畅暴露了优化不够的事实,特别是手机厂商的定制ROM相比原生系统都一定程度牺牲了一些流畅性导致这个问题显露的更加明显,所以在Android上面作出流畅的应用要付出比iOS更多的精力。

其实Google这些年一直在系统层面作出努力提升系统的UI性能,从硬件加速到Project Butter到Reorder&Merge绘图操作等等,但是我感觉Google对于Android开发最佳实战宣传不够,国内有多少开发者上Youtube看过I/O大会上面的Android Session?几乎每年都有讲关于系统图形性能方面的Session。所以这里面也有国内开发者开发水平和眼界的问题。

综上所述:一是受限于Android平台本身性能不够强大做出相同流畅度的应用比iOS更加困难,二是国内开发者对于Android开发性能优化方面的最佳实践知之甚少。

【何浪的回答(6票)】:

这是两个系统对触摸屏的优先级先后差异造成的。

iphone的屏幕或者是说ios系统认为手指触摸屏幕拥有很高的优先级,系统会先执行一些操作来响应你的滑动屏幕这一操作。

而安卓系统把这一行为优先级放的很低,你用手指触摸了屏幕,系统却先做别的事情,然后再来进行屏幕的变化。

当然,还有其他方面的原因。具体参见四大因素决定 浅析iOS为什么比安卓流畅这里讲的比较好。你可以看看,我觉得很有道理。

【知乎用户的回答(11票)】:

是系统的问题。

应题主问题,这里只讨论滚动视图的情况

不是开发者无能、不作为。事实上,大部分ip程序也是完全没有优化的,可以说写得非常糟糕,但是这样的程序在ip上(滑动)运行得非常流畅。

仅滑动来说,使用系统标准控件,不做任何额外优化,iOS程序比安卓程序流畅许多,这很明显是系统库的差异而不是程序员的差异。

也不是ip硬件强大,ip4现在已经不是什么高级货了,2000多块钱的手机,滑动依然非常流畅,超过同配置的安卓手机。

我给安卓和iphone都写过不少程序,安卓图形系统做得不好是客观事实。

版本4.0之前的安卓有多不流畅,对比过就一目了然。

安卓系统一直以来都在进步是事实,仍然不够好也是事实,希望它以后能越来越好能够和iOS强力竞争。

注意题主的说明,不要随意批判。

如题,比如刷微博时上下滚屏明显不如iPhone跟手(即便是13,14年的旗舰机,拖动起来也没有10年的iPhone4跟手),这是安卓系统底层跟iOS的差距,还是说安卓手机的屏幕反应速度都不如iPhone的?

【知乎用户的回答(4票)】:

硬件:iPhone的屏幕响应速度比绝大多数Android手机都要快

应用:由于Android对第三方应用限制宽松,一些应用使用了非官方控件,代码优化不好会严重影响反应速度。这方面国产应用最多

系统:Android手机厂商大都对系统进行了定制,如果只是改改颜色、按钮样式对应用影响不大,但很多定制ROM会改变一些系统底层文件,从而影响第三方应用运行,比如smartbar。

版本:Android手机有多个版本分布,虽然Google play services能为低版本系统提供最新API支持,但国内手机大都不带Google apps,新版本应用对低版本系统的支持度肯定不好。

说这么多,其实我想说的是,手机硬件发展到今天,除非你买了个四五百块钱的Android手机,不然流畅性已经不会影响你使用Android手机的体验了,普通用户也感觉不出来那几十毫秒差别的响应速度。

【DracoLeo的回答(8票)】:

你们只看到了开发者,忽视了手机。大多数手机的屏幕调教决定了不可能跟手。不信去开发者选项勾选显示触摸操作,然后快速在屏幕上乱画,你看那个圆点的运动轨迹。大多数都不跟手。这种手机应用再好也会有影响的。

【tinyCosmos的回答(5票)】:

感觉是系统的问题。

iOS中滑动用的是UIScrollView的子类,苹果给UIScrollView提供的API也没有可以让开发者自己控制响应时间和滚动速度的…而且,引入了ARC后开发者也不太需要关心内存释放什么的…

在Xcode里建一个空的模版,让它视图是scrollView,初始化后其它各种属性值不去设置,delegate也不设置(就是除了初始化后啥都不干),然后放机器上跑,上下滑动照样好好的。

而且关于触摸响应(UITouch,UIResponder)以及手势(gesture)苹果封装的比较好,开发者自己基本不需要再做修改,除非有特别的需要才去自己写一些和相对底层一点的东西打交道的类。

所以并不觉得是开发者的问题,或者说,大部分还是系统的原因吧。

--------------------------------------------

在做iOS开发,自己用的iOS系统。所以只能单方面从iOS的角度来说。偶尔也玩下安卓(同学的),也感觉到了滑动某些时候的问题。

【付连琛的回答(4票)】:

系统问题 android在界面上触摸感觉界面滑动很轻盈 这就是跟手 在android有点沉重 在系统自带的设置里就能感觉到 特别是在设置里的应用程序里 打开这个界面是会计算程序大小 需要大量读写存储器 不跟手更加明显 。android程序可以优化到不卡 但是还是比不上ios跟手 这是系统问题 多任务和ui处理优先级等原因造成的。

【clockred的回答(0票)】:

根据我的测试,同样应用三星s4和iphone相比触摸响应时间有比较明显的延迟

【XSky的回答(0票)】:

晚上看文档看到一点东西,供参考。

原网址:http://developer.android.com/training/improving-layouts/smooth-scrolling.html

The key to a smoothly scrolling ListView is to keep the application’s main thread (the UI thread) free from heavy processing. Ensure you do any disk access, network access, or SQL access in a separate thread. To test the status of your app, you can enable StrictMode.
======================================================================

对于不跟手的现象,我觉得是因为触摸屏响应慢了点,不是有测试说iPhone的触摸屏响应速度最快么?对于流畅,我觉得与GPU渲染有关,我手上的手机是Moto G,运行Android 4.4.4,GPU渲染是开着的,使用知乎客户端的时候,怎么滚动,都是流畅的,还有一台电信送的华为机,GPU渲染没有开,使用知乎客户端时,上下滚动会有卡顿。

【知乎用户的回答(0票)】:

浏览过全部答案和评论,我只是发现一个很好玩的现象

开发者基本都承认是系统问题。系统优先度,和API调用处理都不一样。

即使是直接调用系统API完成的应用,也跟IOS相差一些。请问我该怎么优化?

然而回答被反对。

而使用者大多指责说是开发者的问题,优化不够,市场不对,或者价格问题。

对于说市场的,别把谷歌商店吹的太神了。

我就想指教一件事,同样是QQ在google appstore下载跟我在豌豆荚下载有什么区别么?

【金佳继的回答(0票)】:

题主看这里~看这里~~这里有正确答案~~

这是两个系统渲染机制的问题

以下为引用

“iOS的UI渲染采用实时优先级,而Android的UI渲染遵循传统电脑模式的主线程普通优先级。

这听起来似乎很抽象和难以理解,但大家可以尝试一下,使用你的iPad或者iPhone,打开Safari,然后加载一个复杂的网页,例如新浪网首页,当网页加载到一半的时候,把你的手指放在屏幕上,并且四处移动,你会发现所有的渲染立刻停止,在你拿开手指前,网页永远也不会继续加载。

而在Android设备上重复这个操作,你会发现,浏览器会继续尝试加载页面并渲染HTML,试图多任务同时进行,因此对于Android来说,一个高效的双核处理器是很重要。

在iOS中UI渲染过程具有绝对的优先等级,当用户接触到iPhone的触摸屏后,iOS中所有的进程都将停止,UI线程拦截了所有的事件,系统会将所有资源用于渲染UI过程,以保证用户界面的实时渲染优先级。而在Android系统中UI渲染过程的优先级别却没有那么高,也就是说当你触摸Android手机屏幕的时候,系统后台的程序并没有停止,仍然在继续运行之中,比如下载和查收短信,这样系统UI获得的资源就不够,这就是Android系统不流畅的原因。”

如果题主尝试下 windows phone,你会发现微软在这方面做的比苹果好。比如在微信朋友圈中下拉,ios会有一点点卡,wp顺滑到底。

【小断的回答(0票)】:

是开发者问题。单纯比较安卓和IOS的流畅度,一定要用最新的nexus进行对比。然后你会发现单是‘’微博‘’这个应用流畅度是没差的。但是总体应用质量安卓是要比IOS差。

【邵元锟的回答(0票)】:

系统优化方面做得不好吧,还有第三方对应用的随意开发

【金子辰的回答(0票)】:

其实我觉得不只是@pansz说的应用设计水平的原因。要是用几百块钱或者2~3k的5寸大果粒老掉牙双核心处理器的骗钱机(我说的是棒子你懂的)跟一众旗舰或是当代的iPhone比你当然是会有想死的感觉,如果要比至少要是价格差不多或者配置说的过去的安卓手机和iPhone/iPad比好吧。一味的说安卓比苹果卡的希望你至少要过过脑子谢谢

原文地址:知乎

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多