范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

大厂Android开发高频面试问题说说你对Zygote的理解

  前言
  Zygote可以说是Android开发面试很高频的一道问题, 但总有小伙伴在回答这道问题总不能让面试满意,  在这你就要搞清楚面试问你对Zygote的理解时,他最想听到的和其实想问的应该是哪些? 下面我们通过以下几点来剖析这道问题!  了解Zygote的作用  熟悉Zygote的启动流程  深刻理解Zygote的工作原理
  下面来我们来深入剖析  一、 Zygote的作用
  Zygote的作用分为两点:  启动SystemServer  孵化应用进程
  关于这个问题答出了这两点那就是OK了。可能大部分小伙伴可能能答出第二点,第一点就不是很清楚。SystemServer也是Zygote启动的,因为SystemServer需要用到Zygote准备好的系统资源包括:
  直接从Zygote继承过来就不需要重新加载过来,那么对性能将会有很大的提升。  二、Zygote的启动流程2.1 启动三段式
  在说Zygote启动流程之前, 先明确一个概念:启动三段式, 这个可以理解为Android中进程启动的常用套路, 分为三步骤:
  这里要了解LOOP循环是什么,其实LOOP作用是不停地 接受消息  , 处理消息  ,消息的来源可以是 Soket  、 MessageQueue  、 Binder  驱动发过来的消息,但无论消息从哪里来,它整个流程都是去接受消息,处理消息。这个启动三段式,它不光是Zygote进程是这样的,只要是有独立进程的,比如说系统服务进程,自己的应用进程都是如此。  2.2 Zygote进程是怎么启动的?
  Zygote进程的启动取决于init进程,init进程是它是linux启动之后用户空间的第一个进程,下面看一下 启动流程 :  linux启动init进程  init进程启动之后加载init.rc配置文件
  3.启动配置文件中定义的系统服务,其中Zygote服务就是定义在配置中的
  4.同时启动的服务除了Zygote之外还有一些别的系统服务也是会启动的,比如说ServiceManager进程,它是通过fork+execve系统调用启动的
  2.2.1加载Zygote的启动配置
  在init.rc 文件中会import /init.${ro.zygote}.rc,init.zygoteXX,XX指的是32或者64,对我们没差我们直接看init.zygote32.rc即可。配置文件比较长,这里做了截取保留了Zygot相关的部分。  service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server     class main     socket zygote stream 660 root system     onrestart write /sys/android_power/request_state wake     onrestart write /sys/power/state on     onrestart restart audioserver     writepid /dev/cpuset/foreground/tasksservice zygote:是进程名称,  /system/bin/app_process:可执行程序的路径,用于init进程fork,execve调用  -Xzygote /system/bin --zygote --start-system-server 为它的参数  2.2.2启动进程
  说完了启动配置呢,这里来聊一下启动进程, 启动进程有两种方式:
  第一种:fork+handle  pid_t pid = fork(); if (pid == 0){   // child process } else {   // parent process }
  第二种:fork+execve  pid_t pid = fork(); if (pid == 0) {   // child process   execve(path, argv, env); } else {   // parent process }
  两者看起来差不多,首先首先都会调用fork函数创建子进程,这个函数比较奇特会返回两次,子进程返回一次,父进程返回一次。 区别在于:  子进程一次,返回的pid是0 但是父进程返回的pid是子进程的pid,因此可以根据判断pid来区分目前是子进程还是父进程  对于handle默认的情况,子进程会继承父进程的所有资源,但当通过execve去加载二进制程序时,那父进程的资源则会被清除  2.2.3信号处理-SIGCHLD
  当父进程fork子进程后,父进程需要关注这个信号。当子进程挂了,父进程就会收到SIGCHLD,这时候父进程就可以做一些处理。例如Zygote进程如果挂了,那父进程init进程就会收到信号将Zygote进程重启。
  三、Zygote进程启动原理
  主要分为两部分Native层处理和Java层处理,Zygote进程启动之后,它执行了execve系统调用,它执行的是用C++写的二进制的可执行程序里的main函数作为入口,然后在Java层运行!
  先来看一下Native层的处理流程
  在app_main.cpp文件,AndroidRuntime.cpp文件。我们可以找到几个主要函数名  int main(int argc,char *argv[]){    JavaVM *jvm;    JNIEnv *env;    JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args); //创建Java虚拟机    jclass clazz = env->FindClass("ZygoteInit"); //找到叫ZygoteInit的Java类    jmethodID method = env->GetStaticMethodID(clazz,"Main","[Ljava/lang/String;)V"); //找到ZygoteInit类中的Main的静态函数    env->CallStaticVoidMethod(clazz,method,args); //调用main函数    jvm->DestroyJavaVM(); }
  根据上述代码,你会发现在我们的应用里直接就可以 JNI 调用了,并不需要创建虚拟机。因为应用进程是Zygote进程孵化出来的,继承了父进程的拥有虚拟机,只需要重置数据即可。
  接着看一下Java层的处理,具体可参考ZygoteInit文件的main方法
  1.预加载资源,比如常用类库、主题资源及一些共享库等
  2.启动SystemServer进程
  3.进入Socket 的Loop循环 会看到的ZygoteServer.runSelectLoop(…)调用  boolean runOnce() {     String[] args = readArgumentList(); //读取参数列表     int pid = Zygote.forkAndSpecialize(); //根据读取到的参数启动子进程     if(pid == 0) {         //in child         //执行ActivityThread的入口函数(main)         handleChildProc(args,...);         return true;     } }
  四、总结
  Zygote启动流程中需要主要以下2点问题  Zygote fork要保证是单线程  Zygote的IPC是采用socket
  最后
  如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:  点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。

骁龙8Gen1保熟吗?首发实测性能提升超10!温度有惊喜2022年的第一个加号,比以往时候来的更早一些。刚刚我们拿到了据说是搭载骁龙8Gen1的ROG工程机,现在我们将第一时间为大家带来热乎的性能和功耗测试。如果不出意外的话,我们这应该科学家警告2029年4月13日,一颗小行星存在撞击地球的可能众所周知,地球附近的太空中存在着诸多小行星陨石,它们一直是一个令科学家担忧的问题,毕竟没有什么比一块巨大的太空岩石冲向地球更可怕的了!马斯克和美国宇航局之前都曾对一颗巨大的小行星发小米怎么了2022年5月19日,小米发布了一季报。需要留意的是,这是小米上市以来首次出现营收同比下降的一季报。财报显示,第一季度营收733。5亿元,同比下降4。6第一季度(国际准则)净亏损5苹果和小米再好也不能盲目入手,这4款几乎零差评,可以用到2026苹果手机是公认的高端手机,但是即使高端手机再好也不能盲目入手。今天要跟大家聊的这四款手机,堪称零差评钉子户,性能上无可挑剔,可以顺畅使用到2026年。iPhone13Proipho顺着IP地址,他们能找到我家吗?近期,各大互联网平台陆续显示用户IP属地,而用户方则无法选择开启或关闭这一功能。最先被发现的,是不少认证为本地资讯博主和海外资讯博主的账号,IP属地与资料地址并不吻合。一些人支持平马斯克称若生育率持续下降日本最终将不复存在特斯拉CEO埃隆马斯克周日发推,再次表达对生育率下降问题的担忧,称如果日本生育率持续下降,这个国家最终将不复存在。马斯克写道冒险说句显而易见的话,除非有什么改变,使出生率超过死亡率完善数据存储体系,保障数字经济安全高效发展完善数据存储体系,保障数字经济安全高效发展王晓明张越鹿文亮随着社会经济各领域数字化建设的推进,数据成为经济发展的战略资源,数据存储需求呈现指数级增长,数据中心5G网络等新型基础设施小鹏汽车采集人脸数据被罚10万6个月采集43万张照片来源北青报本报讯(记者董振杰张鑫)小鹏汽车采集43万张人脸照片被罚一事,引发媒体关注。12月14日,天眼查App显示,上海小鹏汽车销售服务有限公司(简称小鹏汽车)被上海市徐汇区市场京东入驻酒水饮料如何入驻?新商家政策双费降扣知舟京东入驻背靠大树好乘凉,京东的平台资源和品质,都让人放心,尤其是酒水类,消费者更看重品质。关于选择入驻京东的原因,京东在消费者中的口碑较好,同时客单价会比其他平台高一些,所以大中国能建vs中国电建,谁是新能源建设之王?随着新能源替代传统化石能源进程的不断提速,风光等新能源电站建设,抽水蓄能电化学储能等储能系统建设,特高压输配电系统建设都将进入快车道,催生大规模的新能源建设需求,为相关建设企业带来体验了一个月苹果13,最后换回了华为Mate40pro,主要原因有三个再iphone13发布以后,王守义十三香这个梗也是火了起来,iPhone13借助这个梗拉动了非常高的销量。从实际的预售情况来看苹果十三确实是香,某多多百亿补贴的价格竟然要比刚出来的
看图说话!vivoX50Pro大显神威,看完样张有种冲动我们在生活中往往会遇到很多美好的瞬间或者美好的场景,但是由于手机相机的局限性,很多时候并非能够很好的记录,比如很美的夜景,比如运动的瞬间,比如逆光环境下的景色等等。这些手机虽然也可真实在!vivoX50邀请函是一个微云台相机忍不住剁手最近国产手机也发布了不少的新机,但是怎么讲呢?很多手机笔者并不满意,或者说并不符合笔者的需求,毕竟每个人的需求是不一样的。笔者想要一款拍照又好,手机又轻薄的手机,想了想,实在太难了拍短视频拍照片和自拍,哪款微单最合适?佳能尼康还是索尼?作为在影像行业从业20多年的老人,虽然不敢说自己很懂摄影和摄影器材,但是自己非常喜欢玩各种不同的摄影器材,也经常进行婚拍以及进行自媒体短视频创作,所以还是有一点点经验和心得的,所以顶级视频神机大比拼松下S1H对决视频之王索尼A7SIII在视频拍摄领域,过去很长一段时间都是摄像机占主导地位,不过随着数码相机视频拍摄功能的不断强大,微单和单反的视频拍摄能力以及画质对比传统的摄像机有过之而无不及,慢慢取代了比较笨重庞大买房你不知道的那些坑个个坑深似海!你踩了几个?每个人的一生,都会遇到各种各样的坑有些是大坑,有些是小坑,有些坑可以让人不痛不痒,比如在某多多买到很多假货,或者付了款一个月不发货,属于小坑。也有些坑可以让人痛不欲生,比如倾其一生有了单反或者微单后,如何选择你的第一支镜头?这里面有很多讲究过去一段时间,我说单反或者微单机身方面的内容比较多,但是较少涉及镜头方面的专业知识,今天就专门给大家讲一讲镜头方面的一些问题。大家都知道,一台相机,如果没有了镜头,它就什么也不是,两款7000元左右的微单套机佳能M6二代和索尼A6400谁更值得买?大家都知道,现在你看数码相机的销售网页以及测评,基本上都只说好处,不提缺陷,而我这里不同,优点和缺陷全都说。废话不多说,直接进入主题两款7000元左右的微单套机佳能M6二代和索尼A值得收藏索尼佳能尼康松下富士微单优势劣势综合分析最近看了不少国内的数码相机测评网站,比如什么无忌什么鸟网什么洋以及某关村在线等,发现了一个有趣的现象那就是国内绝大多数网站的测评都是报喜不报忧,只说优点和长处,不说缺点和不足。当然两款顶级拍照手机小米11Ultra和荣耀Magic3Pro,谁更值得买?最近参加了一个线下的旗舰级拍照手机展销活动,其中有两款价格完全相同的顶级拍照手机引起了不少网友的兴趣,一些网友希望能够从这两款手机中选择一款,特地咨询我,因为咨询的人数较多,我无法尼康和佳能单反微单全面对比一针见血地指出各自缺陷和问题喜欢摄影的小伙伴们都知道,目前在单反和微单领域,主流的品牌就是佳能尼康和索尼,另外还有松下富以及莱卡和奥林巴斯等。在单反领域,佳能和尼康是绝对的主力,而在微单领域,索尼尼康和佳能也这两款销量超好的佳能单反微单尽量不要买,谁买谁入坑在电视上,我们经常看到一句广告词佳能,感动常在。因为广告做得好,找了很多明星代言,加上比较注重用户体验,佳能单反的销量一直是遥遥领先。对于小白和新手而言,佳能确实比较友好,操控简单