美文网首页
2018-07-04 activityThread

2018-07-04 activityThread

作者: 鼓励自己前进 | 来源:发表于2018-07-04 15:21 被阅读0次

    Activity的启动过程。

    我们知道,在Android系统启动时,第一个启动起来的进程就是zygote进程,然后由zygote启动SystemServer,再然后就是启动例如ActivityManagerService、WindowManagerService等系统核心服务,这些服务承载着整个Android系统与客户端程序交互的重担。zygote除了启动系统服务与进程之外,普通的用户进程也由zygote进程fork而来,当一个应用进程启动起来后,就会加载用户在AndroidManifest.xml中配置的默认加载的Activity。此时加载的入口是ActivityThread.main(String[] args)方法,这个方法就是类似于C语言中的main方法一样,是整个应用程序的入口。在ActivityThread.main(String[] args)这个方法中,主要的功能就是创建Application和创建Activity,并且调用Activity的一些生命周期函数,例如onCreate、onResume等。

    首先分析下activityThread。AcitivityManager产生的新进程就是在main函数开始的:

    activityThread程序入口

    这里这Looper就是大家常说的,activity主线程不需要手动去初始化,因为这里已经做好了准备并且去轮询了。同时初始化了一些运行的环境,日志信息和一些标志位信息等操作。

    attach部分代码

    参数为false,表明这不是系统进程,是给普通应用程序用使用的进程。

    addFirstDrawHandler回调方法确认虚拟机是否正常。

    android.ddm.DdmHandleAppName.setAppName设置app名字和id,看起来和DDMS相关。

    RuntimeInit.setApplicationObject将ApplicationThread对象传递给RuntimeInit保存,setApplicationObject是一个静态方法,且RuntimeInit中方法多为静态方法.                                                                  

    mgr = ActivityManager.getService() 用来获得IActivityManager的一个实例和底层沟通(方法在ams里面)。mgr .attachApplication(mAppThread),ApplicationThread mAppThread 不是一个Thread,而是一个Binder,负责与远程的ActivityManagerService进行交互。

    private class ApplicationThread extends IApplicationThread.Stub {

    public final void schedulePauseActivity(){}

    public final void scheduleStopActivity(IBinder token, boolean showWindow, int configChanges)

    。。。。。。

    }

    attachApplicationLocked启动activity

    BinderInternal.addGcWatcher()添加一个gc观察者,主要是观察是否快达到heap的上限,当已用内存超过最大内存的3/4,则请求释放内存空间。DropBox.setReporter,添加dropbox日志到libcore;

    启动进程流程

    相关连接

    相关连接2

    相关连接3

    http://gityuan.com/2016/03/26/app-process-create/

    相关文章

      网友评论

          本文标题:2018-07-04 activityThread

          本文链接:https://www.haomeiwen.com/subject/gmyeuftx.html