百科问答小站 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年挪到辛亥革命,那上海将是中国近代受到政策优惠最多的地方。从大上海计划到后来的工农业剪刀差,从“中国的王牌“到浦东开发,无一不说明这点。因此,上海的”吸血“比北京早了几十年。所以理论上相应的”反哺“就会早几十年。我们可以拿苏州园区的建设对比唐山曹妃甸,基本上就是这个时间差。

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

第三,产业结构

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

第四,人文思想

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

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

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




  

相关话题

  苹果关闭了俄罗斯用户的部分功能,还可能变成了砖,苹果手机还安全吗? 
  华为手机和VIVO手机同价钱那个性价比高? 
  如何看待郭明錤爆料 iPhone 12 可能不再附送充电器? 
  你会选择买一个 9000 的苹果用三年,还是三年每年换一个 3000 的安卓手机? 
  iPhone 11 用什么手机壳比较好看? 
  为什么国产手机厂商往往不配置 3D touch 和线性马达? 
  iPhone XR 的实际体验如何? 
  打算在 2021 年的 618 买手机,有什么推荐的机型? 
  为体验iOS系统入手iphone11值得吗? 
  如何看待网传苹果 iPhone 12 Pro 超清渲染视频?符合你的预期吗? 

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





© 2025-03-29 - tinynew.org. All Rights Reserved.
© 2025-03-29 - tinynew.org. 保留所有权利