谢请!
Android会卡顿不光是Java的锅,当然Java构建在虚拟机上的这个特点,确实会对Android系统的流畅度造成比较大的影响,不过这并不是唯一的原因。
Android为什么不用C语言开发应用?
Android本身是基于Linux内核发展起来的,在技术栈方面Android内核部分是C语言编写的,中间的框架是C++,连接应用层、应用开发是通过Java来开发的。
为什么不用C语言来开发Android应用呢?
C语言本身不是面向对象的编程语言,用来做业务开发并不是特别适合,要做图形界面更是非常不擅长,跟Java和C++这些编程语言比起来,在这方面有很大的差距。
C语言还有个非常大的劣势是,学习门槛要比Java等编程语言还是要高很多,而且C语言程序员数量相对来说比较少,这对于Android初期的发展是不利的。Java程序员数量多,Java还是开源免费的编程语言,面向对象、跨平台,这都是Java的优点,刚好这些优点跟Android的发展非常契合。因此不选择C语言,也是有特定的原因的。
Android卡顿不光是Java的锅
基于虚拟机是Java的优点,这让Java拥有非常好的跨平台优势,也确实客观上让Android的“负担”增加了,不过这并不是全部原因。
- Android碎片化太严重了:硬件乱七八糟、ROM厂商都有自己的规则
Android的碎片化主要是两方面造成的,一个是硬件、一个是软件。
Android的硬件设备简直是太丰富了,这一点跟Windows很类似。Android手机分为非常多的厂商,三星、小米、OPPO、VIVO、华为等等;Android手机的处理器也非常多样,高通枭龙、联发科、华为海思麒麟、三星猎户座等等;屏幕形态也是乱七八糟,额头、打孔、水滴,还有各种各样的尺寸、分辨率,非常丰富;摄像头模组也是多种多样,单摄、双摄、三摄、四摄。
Android由于开源、以及某些大家众所周知的原因,导致了在国内每个厂商都有自己的ROM,每个厂商都有一套自己的规则,要加入很多自己的东西,这里面大多数都是负优化。
WebAPP的广泛使用
纯原生开发的好处是性能更出色,可是很难应对互联网的需求变化。互联网行业需求变动太多了,经常要进行版本迭代,WebAPP能够很好的应对需求变动,还能够实现跨平台开发,能够大大的减少研发成本。WebAPP跟原生应用比起来性能和体验都会差很多,这一点同样会让用户体验变差。
国内应用开发商都非常不规矩:权限滥用、功能冗杂
Google对于Android的权限管理本来就比较开放,在国外的原生Android还好,Google可以通过Google Play进行统一管理,管理也非常严格,因此原生Android其实还是比较流畅的,卡顿的问题没有那么严重。
不过这一点到了厂商这儿就完全不一样了,每个厂商都有自己的ROM,每家厂商的管理严格程度也不一样,这就让应用厂商有了很多捷径。国内的应用厂商权限滥用非常严重,各种不讲道理的后台启动、以及各种各样的监控,后台杀都杀不掉,不断地自动重启,耗费硬件资源。
国内的应用恨不得一个App要把你吃喝拉撒睡所有的事情都给你解决了,订机票火车票、点外卖、买电影票、看新闻、聊天、充话费水电费、购物……总之所有的功能都要开发,这会让App在功能上非常臃肿,自然会占用更多的硬件资源。
因此,Android卡顿的问题不光是Java的锅,Android硬件、软件厂商导致的碎片化,应用开发商又不太守规矩,功能冗杂不说、还滥用权限,这样的Android换什么编程语言都难。
本文为作者EmacserVimer问答原创文章,未经允许转载、抄袭必究!
首先说结论 肯定会
android 的app是运行在一个虚拟机内,中间就多了一层的调用。
另外java没有直接编译成二进制,而是java byte code,需要再经过jit才能运行,这又是一比开销。
这两方面看 c必然快一些。
但是app开发如果也用c的话,那么app的数量和质量看 肯定会差很多,毕竟c并不是一门容易使用的语言。如果一个系统飞快但是没有app的话 你还会用么
一群外行,安卓需要效率的都编译成二进制代码了,显卡渲染也和是c还是Java没关,剩下的是c是Java基本没影响,Java能跑五十帧的,换成c通常也去不到五十一帧。
会更快一些,但是c语言开发软件的工作量比较大,而且很多软件的图形界面是c++或者java开发的,目前C语言还没有什么比较好的类似qt这种图形界面框架。用C开发图形界面的软件工作量会很大