Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android应用程序启动过程_Android_Launch - Fatal编程技术网

Android应用程序启动过程

Android应用程序启动过程,android,launch,Android,Launch,我正在搜索一些关于android应用程序如何发布的信息。我想找到关于合子和fork()的信息。你知道一些有用的网站或书籍吗?演示文稿中有一个很好的解释。它部分用韩语编写,但大部分信息用英语编写。我在我的博客上写了一个分为两部分的系列文章来解释Android应用程序的启动过程- 我希望您会发现它很有用。以下是一个基于AOSP 9.0.0的简明答案(过程非常复杂,因此简明答案仍然不会很短) 每个Android Java进程都是从Zygote派生出来的,所以首先是Zygote是如何启动的 init

我正在搜索一些关于android应用程序如何发布的信息。我想找到关于合子和fork()的信息。你知道一些有用的网站或书籍吗?

演示文稿中有一个很好的解释。它部分用韩语编写,但大部分信息用英语编写。

我在我的博客上写了一个分为两部分的系列文章来解释Android应用程序的启动过程-

我希望您会发现它很有用。

以下是一个基于AOSP 9.0.0的简明答案(过程非常复杂,因此简明答案仍然不会很短)

每个Android Java进程都是从Zygote派生出来的,所以首先是Zygote是如何启动的

init进程是linux中的第一个进程,它启动可执行的“app_进程”,其内部为:

(entry point of app_process)int main
    ->void AndroidRuntime::start
        startVm    //start Java VM
        startReg    //register common native functions
        //call java method ZygoteInit.main from native code
        env->CallStaticVoidMethod  
接下来是最重要的java方法:ZygoteInit.main,我们从上面的本机代码“env->CallStaticVoidMethod”中获得

当您在主活动的onCreate中设置断点并开始调试应用程序并在那里中断时,这也是调用堆栈中的第一个方法。但事实上,您的应用程序永远不会到达ZygoteInit.main的开头,它只在app_进程(或者说Zygote)中从开头执行

此时,上面列出的合子密码将从

Os.poll(pollFds, -1);
并分叉子进程,在此之后,父进程即Zygote将再次执行轮询等待下一个请求,分叉子进程将从runSelectLoop返回并执行ActivityThread.main,如上述代码清单所述

因此,新进程的确切入口点将位于Zygote.forkAndSpecialize中的本机fork()之后,在一个名为ForkAndSpecializeCommon的本机函数中,精确到,然后通过返回路径一直到

caller = zygoteServer.runSelectLoop
在合子体中。因此,尽管Android应用程序的调用堆栈从ZygoteInit.main开始,但在ZygoteInit.main中执行的代码在调用runSelectLoop之后开始,而不是从ZygoteInit.main开始


关于活动:事实上,活动与入口点或启动过程无关。当AMS随时向流程发送活动启动请求时,活动启动。因此,当接收到启动请求时,活动启动流程始终在主消息循环中启动,它由来自AMS的消息驱动,并与应用程序启动流程完全解耦。

实际问题是什么?活动以
startActivity
开始。为了深入了解android如何处理进程,你最好搜索
linux内核
,而不是android:)我想知道android应用程序到底是如何启动的。像这样的,但更详细一些,谢谢,非常好。在kandroid.org上还有一些文档,但是是韩文的。你知道其他一些网站有相同的内容,但在英语?对不起,但不是。我不知道。韩国人在安卓操作系统开发方面非常出色。我有时会发现所需的信息只有韩语(翻译工具帮助我:)
Os.poll(pollFds, -1);
caller = zygoteServer.runSelectLoop