首页 > android最恶心的是什么?

android最恶心的是什么?

别的不提了,最让我恶心的是它因为各种各样的原因自己不知不觉就会启动好几个我根本用不着的程序和后台服务,有时候甚至让人觉得匪夷所思,然后这些进程还就在那呆着了。

android管理内存的方法叫做low memory killer,这东西简单的不能再简单,就是留比如30M缓冲,你启动一个新程序可以往这30M里放,同时它再清出30M;也就是说这个时候去结束它觉得没用的程序。

这里头有一个核心思想,就是我花钱买的内存不是用来空闲的。保证越多的程序在内存里,那么切换进这些程序的概率就越高,如果中奖了速度就会更快。

这个道理听起来再正确不过了,可是一个处理不好,就是android这样的老牛拉破车的结局:你搞不清楚什么时候CPU或者内存就被别人占用了,于是间歇性的会明显感觉到不流畅。可惜Google就是处理不好这个,很容易就在这个缓冲的边界折腾来折腾去。

仔细观察一下android下Java程序的架构就知道,有时候你仅仅需要一个简单的动作,这时候却牵连出一大堆占内存的东西。不知道这到底是赖面向对象的组织方法呢,还是赖Google没设计好。

另一方面,这种设计就很难约束开发者;随便拿一个Process Monitor看一下,仔细一琢磨就知道,很多时候很多软件的不同模块之间没必要的牵连太多,功能分布不合理,尤其是这些程序如果是作为Framework的扩展和围绕常用功能集展开的,比如厂商自定义的东西,就完蛋了。

这就是为什么Sense界面和原生Android在轻量级使用时空闲内存会有那么大差异的原因(HTC的主设计师应该开掉),以及为什么Android会不可思议的时快时慢的原因(和其它厂商相比)之一。

让我们再观察观察Settings.apk。这玩意有什么内容?居然要占走几M十几M的内存。为神马为神马这是为神马!能够快速加载和启动的程序,或者程序中的某一部分,根本就没有必要留在内存里。我们可以说,Google这种常驻内存的策略,最终全都优惠在那些驻不驻内存用户根本察觉不到的东西上了。

那另一个影响速度的原因是什么呢?是那些该死的服务:虽然看起来Google想规划一下这个事情,但是至少目前,这些服务还是会经常性的和用户当前操作去抢CPU资源。

让我们看看Linux内核编程是处理这个事情的:接着中断的例程必须尽可能快速的结束,把大部头工作交给一个队列去做。Linux内核程序员全都懂这个事情,但你Google没权利要求我们像做驱动那样做应用,更何况整个运行时设计的素质让开发人员处理这个比在内核里还难!

(Android的主设计师应该开掉,你知道你设计的是什么东西吗?)

不知道竞争到底会走向百花齐放还是就这样了。如果真的硝烟再起,我要说的是,只要有一家肯真正努力,Android一定完蛋,不管它那时候是3.5还是9.0。因为大规模更改运行时去达成合理化,等于直接把App数降回史前时代。

不过这些也真难说了,从最上到最下,从最大到最小,世道变了,人心也变了。哥们我是不得不关注这些方面寻找机会,有朝一日财务自由了,宁可回去当原始人也绝不忍受这种对付事情的产品。

 

P.S. 一旦有了真正的竞争而不是几个寡头垄断,战火烧到PC平台也不是没有可能。到了那会儿第一个销售收入下降的就是可怜的Intel,因为大家发现居然有免费的午餐,下载个盗版XYZ就能让体验好一倍... (我这篇文章说的是体验,不涉及真正的执行效率,虽然这方面Google跟竞争对手比也是个新手中的菜鸟)

更多相关:

  • 更多内容,欢迎关注微信公众号:全菜工程师小辉~前言在笔者上一篇博客,详解了NIO,并总结NIO相比BIO的效率要高的三个原因,彻底搞懂NIO效率高的原理。这篇博客将针对第三个原因,进行更详细的讲解。首先澄清,零拷贝与内存直接映射并不是Java中独有的概念,并且这两个技术并不是等价的。零拷贝零拷贝是指避免在用户态(User-space)...

  • 一、预备知识—程序的内存分配  一个由c/C++编译的程序占用的内存分为以下几个部分  1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈,如果还不清楚,那么就把它想成数组,它的内存分配是连续分配的,即,所分配的内存是在一块连续的内存区域内.当我们声明变量时,那么编译器...

  • 我的爱机是一台ThinkPad T420,原装三星DDR 1333 4G内存一根,还剩一根内存位置,最近趁京东6.18促销,准备增加一根物理内存。为了确保兼容性,觉得仍然选购DDR 1333 4G内存,于是购买了金士顿这款,比如DDR3 1600的还贵。 这个安装过程完全参照该内存的网页提示进行 这里简单记录一下,以备...

  • 陪伴我多年的老本ThinkPad T420渐渐垂垂老矣, 我想更新一下可以更新的部分, 比如将2.5寸HDD更换为SSD, 将单条4G内存再增加一根, 凡此种种想法, 可能最后归结为如何获取该笔记本的硬件配置信息, 在windows下面使用鲁大师之类的检测软件, 也许很好搞定,但是在Ubuntu 14.04平台上如果办到呢? 很简单...

  • 一.内存错误出现的场景 这几天在重构ATS插件代码的过程中遇到了烦人的内存泄露问题, 周五周六连续两天通过走查代码的方法,未能看出明显的导致内存错误的代码, 同时也觉得C和C++混合编程得到一个动态库, 在一个.cpp主文件中,即用new又用malloc来动态分配内存, 可能会导致内存错误.后来网上调研和查资料发现, new和mal...

  • 最近公司要做一个企业微信的小程序,方便企业内的成员来登录,以便一些公司内的业务,只限于公司内的成员来操作,因为有微信小程序的开发经验,所以先当作微信小程序来开发了!首先来讲一下这个企业微信小程序与微信小程序登录的不同,下面是微信小程序登录的流程:小程序内需要调用wx.login(),获取临时登录凭证code,并回传到开发者服务器,然后...

  • sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。其第一个元素是程序本身,随后才依次是外部给予的参数。下面我们通过一个极简单的test.py程序的运行结果来说...

  •   标题:创意虾-程序纹理Blender大师班 信息: 什么是程序纹理? 程序纹理将简单的数学转换为无限的真实感着色器,具有无限的多样性和分辨率。 超越看起来像一团像素特写的图像纹理,运用程序纹理的力量,清晰的细节和没有重复的模式。 你是不是在玩节点滑块,得到了一些有趣的结果,但不确定引擎盖下到底发生了什么?掌握了节...

  • gprof用于分析函数调用耗时,可用gprof分析最耗时的函数,以便优化程序。 gcc链接时也一定要加-pg参数,以使程序运行结束后生成gmon.out文件,供gprof分析。 gprof默认不支持多线程程序,默认不支持共享库程序。 gcc 编译程序时添加编译选项-pg 运行程序,程序退出时生成 gmon.outgprof ./...

  • 一.虚拟机、linux简介 简单介绍一下虚拟机还有就是各种操作系统,比如centos,Ubuntu 操作系统:linux(centos、Ubuntu、redhat),Android,Windows(xp、win8、win10) 进程,多个程序,分时技术,并行技术 一次打开多个程序,我们在只有一个cpu,如何让这些程序进...

  • 一、代码结构概览1.核心部分configs:储存各种网络的yaml配置文件datasets:存放数据集的地方detectron2:运行代码的核心组件tools:提供了运行代码的入口以及一切可视化的代码文件。2.Tutorial部分demo:显而易见就是demodocs: 同样显而易见。。tests:提供了一些测试代码projects:...

  •     我刚刚接手这个项目的时候就被一系列不知所措的文件命名给深深的震惊了,那种振聋发聩不亚于听到赌王离世的消息。 首先请看,文件本来是用于处理“请假审批”,但是文件名居然叫做“teaApprove”,不要欺负我的初中英语不好,这个teaApprove我第一个感觉就是和“喝茶、茶叶”有关的业务,可是和我们这个项目八竿子打不着...

  • 这个问题简单,不做过多描述,如题所述,如果因为这个导致错误,请安装 npm install stylus-loader css-loader style-loader -D...

  • 使用这个宏TS_VERSION_MAOR来判断,这个宏定义在编译时生成在apidefs.h,它包含在ts/ts.h中,所以请在插件这包含...

  • linux valgrind Memcheck–内存检查工具 使用方法: 注意,这里要用debug版本,如果是release的运行文件,则用debug编译出来的可执行文件替换 输出到终端: valgrind --tool=memcheck --leak-check=full ./test.out 输出到文件: valgri...