我有一些非常基本的问题,很高兴得到答案。
问题 1. 每当有人创建生成 *.apk 文件并在设备上安装此 apk 的 android 应用程序时,我们可以肯定地说 android 已为该 apk 创建了新进程吗?
Q 2. Android 应用程序 list 文件是否有应用程序标签并且里面只有服务。如果它作为 apk 安装在设备上。
现在这个服务将被另一个使用 aidl 的 android 应用程序远程访问,它有应用程序标签并且里面有 Activity。访问上面的远程服务。
可以说服务访问App和远程服务是不同的进程吗?我想是的。
我的假设
任何在 list 文件中有标签并生成 apk 并安装在 android 设备上然后由任何其他应用程序远程启动或根据某些事件 Intent 启动自己的应用程序然后 android 框架将启动新进程以启动这个应用程序。请更正?
如果同一应用程序的任何组件要在另一个进程中运行,或者不同的应用程序组件要在同一进程中运行,则可以设置 android:process。
请仔细阅读后再回复,如果需要更多解释,请告诉我。
最佳答案
R1。 apk只是一个包。当您启动您的应用程序时,在底层,Android 所基于的 linux 机器将派生一个名为 Zygote 的进程。然后 Zygote 的副本(已经在其地址空间中映射了 Dalvik 机器的实例,或者 ART 库和提前编译的应用程序代码),将加载所有特定于应用程序的 java 类和所有核心依赖项( native 库),以及所有特定于应用程序的 native 代码。
因此它只会在您启动应用程序时创建一个新进程。假设您可以为同一个 apk 创建任意数量的进程,这只是一个容器。
R2。如果在 AndroidManifest 中您有一个声明为“已导出”的服务,它将在一个单独的进程中运行。然后,您的应用程序将使用称为 Binder 的 IPC 机制与该进程通信,该机制是内核级共享内存的特定实现。 AIDL 是一种在构建时解释的元语言,用于自动生成 Java stub ,这些 stub 将与 native Binder 代码深入协作。
关于安卓申请流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28705766/