资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Java

AMS中ActivityThread的生命周期

Java 更新时间: 发布时间: 计算机考试归档 最新发布

AMS中ActivityThread的生命周期

ActivityThread管理application进程中主线程的执行、调度,执行activities、broadcasts和activity manager请求的其他操作。

AMS中持有的ActivityThread mSystemThead实际上是SystemServer进程的主线程,它的的生命周期如下图所示:


目录

1 systemServer.createSystemContext()

2 ActivityThread.systemMain()

3 ActivityThread.attach() 

4. AMS成员函数ActivityThread mSystemThread

5. AMS.setSystemProcess()


1 systemServer.createSystemContext()

systemserver进程在创建系统上下文的时候调用了ActivityThread.systemMain()来创建该进程的主线程ActivityThread。

///frameworks/base/services/java/com/android/server/SystemServer.javapublic final class SystemServer implements Dumpable {    private Context mSystemContext;    public static void main(String[] args) {        new SystemServer().run();    }    private void run() {        createSystemContext();    }    private void createSystemContext() {        //创建了systemserver的主线程        ActivityThread activityThread = ActivityThread.systemMain();        mSystemContext = activityThread.getSystemContext();        mSystemContext.setTheme(DEFAULT_SYSTEM_THEME);        final Context systemUiContext = activityThread.getSystemUiContext();        systemUiContext.setTheme(DEFAULT_SYSTEM_THEME);    }}

2 ActivityThread.systemMain()

该方法中new ActivityThread(),并调用了其attach()方法。

/frameworks/base/core/java/android/app/ActivityThread.javapublic final class ActivityThread extends ClientTransactionHandler        implements ActivityThreadInternal {    @UnsupportedAppUsage    public static ActivityThread systemMain() {        ThreadedRenderer.initForSystemProcess();        ActivityThread thread = new ActivityThread();        thread.attach(true, 0);        return thread;    }}

3 ActivityThread.attach() 

attach()会给ActivityThread的成员变量sCurrentActivityThread赋值,this表示当前进程创建的ActivityThread实例,从前边分析我们知道此处的this是systemserver进程的主线程。

/frameworks/base/core/java/android/app/ActivityThread.javapublic final class ActivityThread extends ClientTransactionHandler        implements ActivityThreadInternal {    @UnsupportedAppUsage    private static volatile ActivityThread sCurrentActivityThread;    @UnsupportedAppUsage    private void attach(boolean system, long startSeq) {        //被赋值当前实例的ActivityThread        sCurrentActivityThread = this;        mSystemThread = system;        ...    }}

4. AMS成员函数ActivityThread mSystemThread

mSystemThread在AMS的构造函数中调用ActivityThread.currentActivityThread()被赋值。ActivityThread.currentActivityThread()返回的是他的成员变量sCurrentActivityThread,而该成员变量由systemserver进程启动时被赋值,返回的是systemserver进程的主线程。因此AMS中持有的mSystemThread是systemserver进程的主线程。

// /frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.javapublic class ActivityManagerService extends IActivityManager.Stub        implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback, ActivityManagerGlobalLock {          final ActivityThread mSystemThread;      public ActivityManagerService(Context systemContext, ActivityTaskManagerService atm)    {               // 当前进程的        mSystemThread = ActivityThread.currentActivityThread();        mUiContext = mSystemThread.getSystemUiContext();    }}

ActivityThread.currentActivityThread() 方法如下:

///frameworks/base/core/java/android/app/ActivityThread.javapublic final class ActivityThread extends ClientTransactionHandler        implements ActivityThreadInternal {    @UnsupportedAppUsage    private static volatile ActivityThread sCurrentActivityThread;    @UnsupportedAppUsage    public static ActivityThread currentActivityThread() {        return sCurrentActivityThread;    }}

5. AMS.setSystemProcess()

在该方法中使用AMS持有的mSystemThread来安装package=“android”系统application,所以该系统应用运行在systemserver进程中。

public void setSystemProcess() {        try {            //为ActivityThread安装相关system application信息            mSystemThread.installSystemApplicationInfo(info, getClass().getClassLoader());            synchronized (this) {                //4.为systemserver 主进程开辟一个ProcessRecord来维护进程的相关信息                ProcessRecord app = mProcessList.newProcessRecordLocked(info, info.processName,                        false,                        0,                        new HostingRecord("system"));                app.setPersistent(true);                app.setPid(MY_PID); //PID是进程ID,AMS在systemserver进程中                app.mState.setMaxAdj(ProcessList.SYSTEM_ADJ);                app.makeActive(mSystemThread.getApplicationThread(), mProcessStats);                addPidLocked(app);                updateLruProcessLocked(app, false, null);                updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_NONE);            }        } catch (PackageManager.NameNotFoundException e) {            throw new RuntimeException(                    "Unable to find android system package", e);        }        ...    }
转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/1098095.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【AMS中ActivityThread的生命周期】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2