摘要:在系统启动完成完成后,将变为守护进程监视系统其他进程。由上可知进程是系统中所有其他用户进程的祖先进程。进程负责创建系统中的几个关键进程,其中之一的,是世界的开创者。
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,如果能给各位看官带来一丝启发或者帮助,那真是极好的。
先来个最简单的HelloWord代码,用Android Studio 3.0新建项目(一直使用默认)后会自动生成一个HelloWorld的项目,如下:
activity_main.xml
MainActivity.java
package com.helloword; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }Activity的生命周期
我们启动应用程序,安装到手机或者模拟器上,界面显示了一行字“Hello World!”。我们的激动无以言表。下面来看看MainActivity的生命周期——由生到死
典型状态下的生命周期分析(注:图片来自《Android开发艺术探索》,关于各个状态的说明以及如何测试请参看该书籍,这不是本系列的重点)
异常状况下的生命周期分析(注:图片来自《Android开发艺术探索》,关于各个状态的说明以及如何测试请参看该书籍,这不是本系列的重点)
Android系统的创世之初(本章重点)相信前面的知识只要有一些开发经验的就了解。这不是本章的重点,倘若有不太了解的同学可自行查看。那么本章重点来了,在Activity的生命周期开始之前是怎么样的呢,Activity的onCreate这个Activity的入口(开始)函数又是在哪里调用的呢。下面我们来看一下整个Android应用程序的生母吧。
Android下的进程(看清楚不是线程哦)我们在开发Android应用程序的时候经常使用到线程,那么有没有想过进程呢。要知道进程才是分配资源的最小单位。我们知道Andriod是基于Linux系统的。所以Linux系统的启动过程或许能给我们一些启发。
Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2),我们只介绍0,1 > **idle进程由系统自动创建, 运行在内核态** > > idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_thread产生的进程。完成加载系统后, 演变为进程调度、交换 > >**init进程由idle通过kernel_thread创建,在内核空间完成初始化后, 加载init程序, 并最终用户空间** > >由0进程创建,完成系统的初始化. 是系统中所有其它用户进程的祖先进程 > >Linux中的所有进程都是有init进程创建并运行的。 >首先Linux内核启动,然后在用户空间中启动init进程,再启动>其他系统进程。在系统启动完成完成后,init将变为守护进程监视系统其他进程。 > >由上可知**init**进程是Linux系统中所有其他用户进程的祖先进程。其实它也是Android系统的第一个进程。 >init进程负责创建系统中的几个关键进程,其中之一的**zygote**,是Java世界的开创者。 >**zygote**进程如何创建以及之后的流程我们不具体分析源码,因为那涉及到Native层,我们用一张图来表示。Activity的启动过程
前文已经讲到,zygote分裂出嫡长子system_server后,就通过runSelectLoopMode等待并处理来自客户的消息了,那么,谁会向zygote发送消息呢?这里以一个Activity的启动为例,具体分析zygote是如何分裂和繁殖的。
ActivityManagerService也是由SystemServer创建的。 假设通过startActivity来启动一个新的Activity,而这个Activity附属于一个还未启动的进程,那么这个进程该如何启动呢?继续上图,结合上一张图
Activity的创建在上述的main函数中,具体我们就不分析了。
本篇文档主要讲了Activity的生命周期以及Android创世之初所走的道路,总结起来就是init进程创建了zygote进程,zygote进程 进行了一些初始化之后便创建了SystemServer进程,之后便zygote进程调用了runSelectLoopMode()函数等待请求,SystemServer进程创建了Android系统的服务,其中ActivityManagerService(简称AMS)是Android中最核心的服务,主要负责系统中四大组件的启动、 切换、 调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块类似。Activity的启动便是由AMS向zygote进程发起消息(这个说法并不精确由于AMS运行在SystemServer进程中,所以其本质还是由SystemServer进程向zygote进程发起消息)。
此致,敬礼
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/14025.html
摘要:对下半年所分享的文章进行整理,上半年总结的篇好文请点击这里,很多读者当时忘记了收藏,以致于查找一篇历史文章很费劲,因此在这里顺便做下记录。目前就分下下面几个大类,没有更多细分,已基本可以查找了。 对下半年所分享的文章进行整理,上半年总结的 98 篇好文请点击这里,很多读者当时忘记了收藏,以致于查找一篇历史文章很费劲,因此在这里顺便做下记录。目前就分下下面几个大类,没有更多细分,已基本可...
摘要:在安卓系统上,可以通过的思路来达到这一目的下发补丁文件,更新版本。只是一个加载器既然做安卓方案,最好的结果就是能支持更新所有的代码和资源。安卓系统的实现是包装了一层真正的上下文,真正使用到的就是这个。 本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57a31... Android 不仅系统版本众多,机型众多,而且各...
摘要:此时再次旋转屏幕时,该不会被系统杀死和重建,只会调用。因此可通过和来判断是否被重建,并取出数据进行恢复。但需要注意的是,在取出数据时一定要先判断是否为空。只有在进程不被掉,正常情况下才会执行方法。 目录介绍 1.0.0.1 说下Activity的生命周期?屏幕旋转时生命周期?异常条件会调用什么方法? 1.0.0.2 后台的Activity被系统回收怎么办?说一下onSaveInsta...
摘要:代理模式这种模式也是我们项目中,继简单动态加载模式之后,第二种投入实际生产项目的开发方式。是热部署,还是插件化这一部分作为补充说明,如果不太熟悉动态加载的使用姿势,可能不是那么容易理解。 基本信息 作者:kaedea 项目:android-dynamical-loading 技术背景 简单模式中,使用ClassLoader加载外部的Dex或Apk文件,可以加载一些本地APP不存在的...
摘要:已暂停另一项是在前台并具有焦点,但这一项仍然可见。暂停的完全处于活动状态对象保留在内存中,它保留所有状态和成员信息,并保持附加到窗口管理器,但可以在极低内存情况下被系统杀死。的可见生命周期的可见生命周期发生在呼叫和呼叫之间。 前言 基于最近要准备去面试,特意系统的复习了下Android基础,看到Activity这块时,发现很多都忘了,而且之前也没有系统的学习和写笔记记录,所以,特此写下...
阅读 1815·2021-11-24 10:34
阅读 2890·2021-11-22 11:58
阅读 3525·2021-09-28 09:35
阅读 1526·2019-08-30 15:53
阅读 2578·2019-08-30 14:11
阅读 1393·2019-08-29 17:31
阅读 411·2019-08-26 13:53
阅读 2017·2019-08-26 13:45