AMS完成后,该过程将开始。在Android中,这也是第一个过程。
主要过程分为三个阶段:
有一个静态的内部类继承了ActivityTaskManagerinagernal。因此,LocalService是真正的实现。
还有一个静态的内部类来继承ActivityManagerinters。因此,LocalService是真正的现实主义者。
在上一篇文章中对AMS的启动分析中,我们知道发射器流程将在三个阶段启动。
ActivityTaskManagerinal -Minnerther;8
经过2.1分析后,我们知道,矩阵的特定实现类实际上是ATM中的静态内部类Localservice:
ActivityTaskManagerinal -Minnerther;8
rootActivityContainer.java:
ActivityTaskManagerinal -Minnerther;8
它遍历所有屏幕ActivityDisplay,通常只有主屏幕。
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
ActivityStartController:
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
通过mhandler发送消息(使用displayThread线程的循环器,也就是说要切换到线程):resum_top_activity_msg.look in handlemessage():
ActivityTaskManagerinal -Minnerther;8
返回rootactivityContainer.java:
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
Activitystack.java
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
ActivityStackSupervisor.java
ActivityTaskManagerinal -Minnerther;8
}
ActivityTaskManagerinal -Minnerther;8
ProcessList是管理过程类别:
ActivityTaskManagerinal -Minnerther;8
startProcesslocked():
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
flag_process_start_async = true,进行异步启动。异步和同步将转到startProcess():
ActivityTaskManagerinal -Minnerther;8
childzygoteprocess继承zygoteprocess,zygoteprocess继承appzygote类,getProcess()方法,对象返回。
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
zygote_process是一个zygoteprocess对象。
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
返回一个childzygoteprocess对象。
ActivityTaskManagerinal -Minnerther;8
primonal_socket_name =“”。连接Zygote套接字服务。
mzygote.getPrimarySocketDress()返回。
ActivityTaskManagerinal -Minnerther;8
与Zygote的内部连接。
在Childzygoteprocess中,在其父级zygoteprocess中没有办法:
ActivityTaskManagerinal -Minnerther;8
StartViazygote():
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
用zygote真正完成数据读取数据。将启动过程的命令归为中间。
经过一系列的课程参与,启动器开始的第一阶段终于完成了。
那么Zygote如何接收数据?
在Zygote流程的启动中,我们知道该过程启动后,我们将创建服务器,并将始终收听socket的请求。查看特定过程,在此处进行简要摘要:
在Zygote启动本机侧面工作后,将调用JNI调用类的Main()方法。它们将调用该方法以打开周期监视套接字请求。
数据到来后,将调用zygote.forkandspecialize()方法创建一个,输入子过程环境,调用zygoteinit.zygoteinit()方法:
ActivityTaskManagerinal -Minnerther;8
在这一点上,处理了合子过程。现在已经启动了该过程。
由于启动器过程已经启动,因此有必要知道其启动后的作用。
main()方法您会看到:
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
这很简单,创建一个MResourcesManager对象。
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
这是使用步骤 - 通信使用。
ActivityTaskManagerinal -Minnerther;8
让我回到启动器流程以查看其绑定方式吗?
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
从这里开始,我们知道:
已经创建了应用程序,现在您需要处理可用的活动!让我们回到AMS!
最后,将其称为rootActivityContainer的actactapplication()方法,然后调用MstackSupervisor。
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
client traransaction的时间表()内部::
ActivityTaskManagerinal -Minnerther;8
实现是ActivityThread中的静态内部类:。
将系统过程的对象传输到该过程,通知终端执行此Scheduletransaction(此)方法:
由于可以在过程中传递,因此必须是一个对象。
ActivityTaskManagerinal -Minnerther;8
调用了ActivityThread的Scheduletraction()方法。ActivityThread本身没有此方法,但是它继承的parent class client transactionHandler具有:
客户端TransactionHandler.java
clienttransactionhhandler的类别是什么?交叉口用于发送消息以准备以前的事务。
ActivityThread.java
//执行多步交易的执行人。私有最终TransActionExecutor mtransactionExecutor = new TransActionExeCutor(this);这)
ActivityTaskManagerinal -Minnerther;8
public void execute(client TransAction Tractaction){if(debug_resolver)slog.d(tag,tid(transAction) +“启动解决方案交易”);
ActivityTaskManagerinal -Minnerther;8
}
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
}
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
然后,然后
ActivityTaskManagerinal -Minnerther;8
}
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
}
ActivityTaskManagerinal -Minnerther;8
窗口,活动configcallback活动configcallback,ibinder sistingToken){//设置mbase。= 0){mwindow.setuioptions(info.uioptions);} muithread = thread = thread.currentthread();
ActivityTaskManagerinal -Minnerther;8
}
ActivityTaskManagerinal -Minnerther;8
最终的iApplicationToken.stub appToken;//窗口管理器令牌
ActivityTaskManagerinal -Minnerther;8
接口iApplicationToken 22 {23字符串getName();24} 25
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
}
ActivityTaskManagerinal -Minnerther;8
@intdef(prefix = {“ undefined”,“ pre”,“ on”},value = {undefined,pre_on_create,on_create,on_resume,on_paume,on_pause,on_destroy,on_destroy,on_restroy}))
ActivityTaskManagerinal -Minnerther;8
,排除法斯特省);perform LifeCyclesequence(R,PATH,TRASACTION);}
ActivityTaskManagerinal -Minnerther;8
在预防状态”);};}
ActivityTaskManagerinal -Minnerther;8
}
ActivityTaskManagerinal -Minnerther;8
(debug_resolver){slog.d(标签,tid(交易) +“过渡活动:”
在Cycltopath()之后,您还将调用requmeActivityItem.execute()。你在内部做什么?
4.7.2.4 requmeActivityItem.execute()remeactivityItem.java
);}
ActivityTaskManagerinal -Minnerther;8
= true;
ActivityTaskManagerinal -Minnerther;8
ActivityTaskManagerinal -Minnerther;8
.Activity.mfined);} if(r == null || r.Activity.mfined){return null;} if(r.getLifeCyClestate()== on_resume){//执行截距(!finalStatequest){finalStatequest)状态。对于一个//以外的情况,我们不会不快乐。}返回null;} if(finalRequest){r.hidefornow = false;
ActivityTaskManagerinal -Minnerther;8
}
原始:https://juejin.cn/post/709627622325248008