解释为什么Android系统运行的java程序不使用标准的java API和虚拟机

解释为什么Android系统运行的java程序不使用标准的java API和虚拟机,第1张

主要受到版权、成本和生态这些方面才使用的java程序。

android的内核是linux,用java包装一层会有效率上的损失。但是java的用户基数庞大,在当时拉开了c用户5个点之多。

此外,当时市场上有强大的iphone已经抢先建立了apple store,应用数量超android很多,如果用了java就有可能在程序员数量上超过ios程序员。从而建立自己的生态系统。

回答:共有一下四种方法

方法一、在Android应用程序中发送Intent启动Android应用程序

这个方式最简单,最常用。在此不在累述。关于Intent的更多内容请阅读《Intent技术简介》

方法二、在shell控制台通过am命令发送Intent来启动Android应用程序

在Android的shell控制台通过am命令发送Intent来启动Android应用程序

关于此的详细内容请参考《Android命令am详解》

方法三、在shell控制台直接通过davlikvm命令启动一个JAVA程序。

该方式有个天生的缺点,即在其中,很多Android的JNI无法调用。因为Android的很多JNI其实是需要手动注册的。

关于请参考《基本Dalvik VM调用》

方法四、在shell控制台直接通过运行app_process程序启动一个JAVA程序

在app_process程序中,他会对Android的JNI进行手动注册的,能很好的使用Android的API,因此通过运行app_process程序启动一个JAVA程序,是一个比较完美的方式。app_process程序是一个C程序,它的源码位于frameworks\base\cmds\app_process。

关于它的使用请参考《Android命令am详解》以及shell脚本frameworks\base\cmds\am\am和frameworks\base\cmds\pm\pm

安卓对Java的支持和其他一般手机中Java软件支持完全不是一个概念。

笼统的你可以理解为,前者是系统级的,Java作为安卓系统的默认/推荐开发语言,安卓官方API(除了NDK)都是Java的。

而其他手机中对Java的支持是通过J2Me/Kjava,也就是说是Java虚拟机的移动版,并非系统原生支持,只是支持在这些手机平台上装一个Java虚拟机而已。

举个例子,Windows的API是C的,但是Windows下也可以安装JRE(Java 运行环境)来运行Java程序,但是很少有人用Java来做Windows的桌面程序,大多是用C/C++写。

但安卓的API本身就是Java的,不存在另装JRE的问题,也不存在不能访问本地API的问题,所以Android的程序都用Java来写。(除了对性能要求特别高的3D游戏等可能直接用C + NDK来写)

另外能在其他机子上跑的kjava程序不一定能在Android上跑,因为Android用的VM和Sun(现在是Oracle)的完全不同,只是都是用Java这个语言而已。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7776226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存