百科问答小站 logo
百科问答小站 font logo



为什么 Android 的屏幕滚动操作不如 iPhone 流畅顺滑? 第1页

  

user avatar   doodlewind 网友的相关建议: 
      

几个高票答案说的都是现象而非原因。

对 @劉長曦 专栏提到的 g+ 讨论做了个摘要,出处在此

plus.google.com/1050519

首先,安卓不缺硬件加速的支持。从安卓 1.0 开始,安卓就支持硬件加速。菜单的显示/隐藏、提醒的滑动渐变、Activity 之间的过渡以及对话框的显示/隐藏等都是经过硬件加速的。

但硬件加速与安卓「窗口」的概念有关。比如以下这张截图,就包含四个窗口:

状态栏窗口 / 壁纸窗口 / 壁纸上的启动器窗口 / 菜单窗口

安卓一开始的设计目标是「提供开放的应用平台」,在这种设计思路下,安卓通过许多个独立的 UI 元素来分享屏幕:比如输入法窗口和应用窗口就是两个不同的窗口。而同一个安卓应用,也由许多 Activity 组成(比如联系人列表是一个 Activity,联系人详情是另一个 Activity),每个 Activity 又有自己的窗口。发现了吗?安卓 UI 一切皆窗口:从主屏打开联系人应用,你看到的是主屏窗口和联系人列表窗口的动画;按下联系人查看详情,是联系人列表窗口和联系人详情窗口的动画;显示输入法,是键盘窗口的动画...早期的安卓使用软件来渲染窗口内的内容:在 2.3 前,窗口内容由软件渲染,而窗口的组合 / 移动则通过硬件加速绘制。

安卓 3.0 起,改进了对硬件加速的支持,可以用硬件加速绘制一些窗口内的内容,(感谢

@方振宇

指正,还是有些绘图的API没有完全用硬件加速实现,需要开发者手动选择渲染方式。老应用跑在新版系统上强制开启硬件加速有可能出现异常,就是因为系统的某些绘图 API 没有完全实现硬件加速,而强制使用可能就会出现问题。)随着安卓版本更新,窗口内容对硬件加速的支持一直在改进,可以参考这里

Hardware Acceleration

但为什么即便支持了硬件加速,也不能完全保证流畅度呢?事实上,安卓的这个多窗口设计,意味着 GPU 需要同时支持不同进程的多个活动 GL 上下文。而即便到现在,多数移动 GPU 执行上下文切换的代价还是相当高的。

虽然安卓有堆硬件这一说,但硬件加速的资源也很容易被安卓的渲染机制吃光。比方说,Tegra 2 足够在 60 帧下把 1280*800 屏幕的每个像素点渲染 2.5 次。但安卓 3.0 中,光是打开「所有应用」的视图,就需要绘制许多不同的窗口:需要对所有像素绘制一次背景;(往少了说)需要对一半的像素绘制一次 shortcut 和 widget 层;需要对一半的像素绘制一次图标和标签;也需要对所有像素绘制一次「所有应用」视图的黑色背景,还有「所有应用」视图的图标和标签...还不算对这些窗口做最后的组合,就把 GPU 的资源吃光了。当然,安卓对这个机制也有优化,比如把壁纸做成一个比屏幕大的窗口,这样在主屏滚屏时就不需要重绘,只要移动窗口就行。而这个绘制好了的窗口,就不需要额外的 GPU 计算量了。

另一方面,OpenGL 硬件加速绘图也不是万能的,Nexus S 和 Galaxy Nexus 中,每个 OpenGL 应用会占用 8MB 内存。要知道 2MB 的进程开支都是个不小的代价。这 8MB 内存可能从后台进程那里分配而来,造成应用切换速度的下降。

为了提升流畅度,还需要许多其他方面的努力:安卓 1.6 对前后台进程调度的优化、2.3 中对输入系统的重写、 加入并发的垃圾收集等。举一个流畅度不由硬件加速决定的例子:对滚屏操作,Nexus S 在 ICS 上的流畅度比在 2.3 中要低。这其实是因为计时机制发生了变化,有时在 ICS 中,当应用接收触摸事件并绘图时,可能在尚未准备好的情况下就获得了下一个事件,从而导致跟踪手指移动时可能错过一帧,但这时帧率仍然是 60fps (这个 bug 已经修复了)。

@Julius 提到的是关于浏览器的渲染情况。在这方面,安卓和 iOS 的主要差别并非来自硬件加速绘图。早期安卓在渲染网页时做了与 iOS 不同的折衷:将网页以序列方式连续显示,而非贴片方式这样在滚屏和缩放时不会出现 Safari 那样的占位符,但渲染的帧率不够快。安卓 3.0 后改用了贴片方式,改善了滚屏和缩放的体验。但不论是安卓还是 iOS,贴片都是由 CPU 渲染的。

还有,「安卓后台应用太多吃资源」的说法也有问题。安卓的 UI 线程以默认优先级运行,后台线程以后台优先级运行。切换到后台的应用强制以后台优先级运行。而后台优先级利用了 Linux 的 cgroup 机制,它将所有的后台线程放进一个特别的调度组中,它们满打满算也无法占用超过 10% 的 CPU 资源

「安卓的触摸事件不像 iOS 那样优先」的说法也是错的。你可以架梯子看看安卓进程的优先级设定

developer.android.com/r

总的来说,根据 Dianne 的说法,多窗口设计对屏幕绘制的开销,是影响安卓的流畅度的已知因素之一。但决定「流畅」的因素还有很多,抓住某个特定技术细节不放的说法都是有失偏颇的。

以上。


user avatar   federico-mo 网友的相关建议: 
      

分析这个问题可以从四个方面来衡量。因为珠三角有香港的特殊关系,以及面积体量等各种方面的不同,这里我主要拿京沪来举例。

第一,周边基础

首先明确一下,北京周边只看石家庄以北的城市,上海周边只看苏南浙北。于是就能发现北京周边北有燕山,西有太行。题主所谓的“还不及中西部的大中型城市”,其中绝大部分处于这片山区(甚至北京本身就有2/3的面积处于山区),外加自古便是慷慨悲歌的兵家必争之地,故而河北经济发展水平在北京没有成为首都的时候就是落后的。而上海周边则是天堂苏杭,外加地处长江中下游平原的鱼米之乡并非边疆要塞。因此,在没有上海的时候长三角便是富甲天下的地区。打个比方,北京是在贫民窟长大的,而上海是富二代。

(珠三角也是一样的,广东也是个多山的省份,于是就有了珠三与非珠的巨大差距。这样的差距在大平原省江苏看来是不可思议的。)

第二,两地政策

现在我们假定北京、上海发展现代经济的目标都是建成一座可以带动、反哺周边城市群的核心城市。那么北京、上海在建设核心城市的过程中必然会出现一个先“吸血”(政策获益),再“反哺”(带动周边)的现象。

因此,我们来看看的“吸血”吧。人所共知,北京是49年后受到政策倾斜最大的城市,而上海则是当仁不让的老二。但如果把时间轴的原点从49年挪到辛亥革命,那上海将是中国近代受到政策优惠最多的地方。从大上海计划到后来的工农业剪刀差,从“中国的王牌“到浦东开发,无一不说明这点。因此,上海的”吸血“比北京早了几十年。所以理论上相应的”反哺“就会早几十年。我们可以拿苏州园区的建设对比唐山曹妃甸,基本上就是这个时间差。

最后还有一点很重要,如果说当下京沪两地的政策获益还可以比较的话,那江苏与河北的获益就不可同日而语了。江时期大量的政策倾斜几乎可以说是集全国之力发展长三角(发展中部三角、打造成渝经济圈、以及振兴东北这都是后来的事情了)。所以出现了很多搞笑的事情,比如作为中国科技中心的北京有大量的科研成果等待卵化。而这些叫“清华科技园”、“中关村科技园”之类的卵化机构居然不在河北或者天津,反而去了长三角的无锡苏州。这就越发加剧了两地的发展不均。

第三,产业结构

上海是中国的工业中心,而考虑到交通问题,北京则主要发展服务业。这样一来,上海在产业升级的时候更加适合给周边地区“反哺”。而北京则没有太多的东西可以外放了

第四,人文思想

江南人民的商业头脑自古就是中国翘楚,并且和经济发展形成了良性循环。而河北大部分人至今没有摆脱小农经济的影响。另一方面,东南沿海地区人民的奋斗精神也十分值得称道,而河北人民的生活相对闲适,更喜欢享受生活,比不上四川,但我看也差不多了。虽然,“奋斗”和“享受”这两种生活态度不能说有优劣之分,但必须承认不同的态度对地区发展有着实际且不同的影响。

综上,结果就是:基础好并且有优惠政策和商业头脑的江浙地区,更早的接受了上海更多的反哺; 基础相对差并且又没有政策优惠和商业头脑的河北地区,更晚的接受了北京较少的反哺这样一来就有了今天的局面。

最后来个私货:我认为如果北京不是首都或者只是单纯的政治中心,那么河北可能比现在还差。毕竟不论从地理位置还是资源条件来看,河北几乎都是中国大陆临海省份里最差的,甚至不如一些内陆省份。




  

相关话题

  BMPCC 6K机器内怎么删除单条不满意的视频呢? 
  怎么看待在中国有人说 iPhone 是穷人标配这个事情? 
  如何评价锤子手机宣告产能问题已经解决? 
  如何看待苹果单季营收首破千亿美元,2021 第一财季平均每天净赚约 20 亿人民币? 
  你因为什么而离开小米? 
  为什么 iOS 不搞双开功能? 
  如何评价一加手机海外版的包装上标明“轻松的使用您常用的Google应用”? 
  为什么苹果至今还非常受人欢迎? 
  学生用新苹果手机(华为也行)便宜推荐,最好在2000左右,性能好,内存大,用久不卡,续航强? 
  手机曲面屏有绿边这个问题为什么手机厂家还要继续使用这些? 

前一个讨论
如果深圳爆发丧尸病毒,逃跑路线是怎样的?
下一个讨论
TI4 Dota 2 国际邀请的赛奖金为什么这么高?





© 2024-11-24 - tinynew.org. All Rights Reserved.
© 2024-11-24 - tinynew.org. 保留所有权利