zoukankan      html  css  js  c++  java
  • android开发Activity启动流程简单记录方便搜索以及回顾

    1.点击launcher图标
    LauncherApp.onClick-> onClickAppShortcut()->startAppShortcutOrInfoActivity()->launcher.startActivitySafely()
        Activity.startActivity->startActivityForResult
    
    2.页面启动逻辑
    Instrumentation.exeStartActivity -> ams.getService.startActivity(ActivityTaskManager.getService().startActivity) -> startActivityAsUser()
        ActivityStarter.startActivity -> ActivityStarter.startActivityUnchecked() -> mRootActivityContainer.resumeFocusedStacksTopActivities();
            ActivityStack.resumeTopActivityUncheckedLocked() -> ActivityStack.resumeTopActivityInnerLocked()
                mStackSupervisor.startSpecificActivityLocked() -> 判断进程是否已经存在,即ApplicationThread是否为空
                //逻辑判断if(ApplicationThread!=null) mStackSupervisor.realStartActivityLocked() else mService.startProcessAsync()开启新进程
                    //如果ApplicationThread不为空,走步骤4;为空都步骤3
                        
    
    3.第一次启动,ApplicationThread为空进程不存在,调用Process.start开启新进程->入口是android.app.ActivityThread
    ActivityManagerService.startProcess() -> mProcessList.startProcessLocked()->Process.start()开启新进程,入口是android.app.ActivityThread
        ActivityThread进程启动main函数执行,逻辑进入该main函数
            ActivityThread.attach()-> IActivityManager.attachApplication(mAppThread, startSeq)即AMS.attachApplication(mAppThread, startSeq);
                //mAppThread即ApplicationThread是ActivityThread的一个内部类,IActivityManager实现类是ActivityManagerService
                //也就是将ApplicationThread实例attach给ActivityManagerService(AMS),由AMS管理Application生命周期函数调用
                ActivityManagerService.attachApplicationLocked()->ActivityThread.bindApplication()->ActivityThread.handleBindApplication
                    data.info.makeApplication()即LoadApk.makeApplicationc创建Application实例app->mInstrumentation.callApplicationOnCreate(app)->app.onCreate()
    自此,进程被创建,application的onCreate方法被回调。
    
    4.如果进程已经存在了
        mStackSupervisor.realStartActivityLocked()->clientTransaction.addCallback(LaunchActivityItem.obtain())、scheduleTransaction(clientTransaction)
            ActivityThread.scheduleTransaction()-> LaunchActivityItem.execute()-> client.handleLaunchActivity()、client实例就是ActivityThread
                 ActivityThread.handleLaunchActivity()->ActivityThread.performLaunchActivity()
                    mInstrumentation.newActivity()->mInstrumentation.callActivityOnCreate()->Activity.performCreate()-Activity.onCreate()
    
    
    //This manages the execution of the main thread in an application process 管理主线程的执行操作
    //scheduling and executing activities, broadcasts, and other operations on it as the activity manager requests//调度执行AM请求的操作
    
    //ApplicationThread时ActivityThread的内部类,ApplicationThread被attach给IActivityMgr持有(IActivityMgr的实现类是AMS)
    //MakeApplication,入口是android.app.Application


    简化:
    按照以下顺序执行:

    app:
    Launcher.onCLick(),
    Activity.startActivityForResult()
    mIntrustment.exctStartActivity()

    remote:
    ActivityTaskManager.getService().startActivity()
    ActivityStarter.startActivityUncheck()
    ActivityStack.startActivityLock(),RootActivityContainer.resumeFocusedStacksTopActivities()
    ActivityStack.resumeTopActivityUncheckedLocked()

    if(exist){
    Remote:ActivityStackSupervisor.realStartActivityLocked()
    ClientTransaction().addLauncherItem().schedule()
    App:ActivityThread.handleLaunchActivity()->mIntrustment.newActivity(),attach(app), call mIntrustment.onActivityCreate()
    }else{
    Remote:ActivityTaskManagerService.startProcessAsync();
    ActivityThread.main()->mgr.attachApplication(this)->mgr call thread.bindApplication()->handleBindApplication()
    ClientTransaction().addLauncherItem().schedule()
    APP:ActivityThread.handleLaunchActivity()->get app and Activity.attach() it, call mIntrustment.onActivityCreate()
    }
     
  • 相关阅读:
    第七次作业-正规式到正规文法与自动机
    第六次作业——正规文法与正规式
    作业5 词法分析程序的设计与实现
    作业4—文法和语言总结与梳理
    第三次作业
    第二次作业-语言和文法
    编译原理第一次作业
    记录在腾讯云上搭建Ubuntu服务器
    第八章总结--排序 数据结构课程终章
    第七章-查找
  • 原文地址:https://www.cnblogs.com/yongfengnice/p/12958309.html
Copyright © 2011-2022 走看看