Activity梳理

Activity.startActivity(intent)
Instrumentation.execStartActivity(this, IApplicationThread, IApplicationToken, this, intent, requestCode, options)
ActivityManagerNative.getDefault().startActivity
ActivityManagerService.startActivity
ActivityManagerService.startActivityLocked (创建新的ActivityRecord)
ActivityManagerService.startActivityUncheckedLocked
mActivityStackSupervisor.startActivityLocked
activityStack.startActivityLocked
mActivityStackSupervisor.resumeTopActivitiesLocked
activityStack.resumeTopActivityLocked
activityStack.resumeTopActivityInnerLocked
(首先调用原始Activity的startPausingLocked,即Activity.onStop)
(如果目标Activity已经存在了, next. app. thread. scheduleResumeActivity
mActivityStackSupervisor.startSpecificActivityLocked


1.如果进程已经启动

mActivityStackSupervisor.realStartActivityLocked
ProcessRecord.thread.scheduleLaunchActivity

2.如果进程没有启动

ActivityManagerService.startProcessLocked
Process.start("android.app.ActivityThread", ...)

ActivityThread.main
new ActivityThread().attach(false)
ActivityManagerService.getDefault().attachApplication(IApplicationThread)
ActivityManagerService.getDefault().attachApplicationLocked

IApplicationThread.bindApplication
mH.sendMessage(H.BIND_APPLICATION, AppBindData)
ActivityThread.handleBindApplication(AppBindData)
ContextImpl appContext = ContextImpl.createAppContext
1. LoadedApk: data.info = getPackageInfoNoCheck(data.appInfo, data.compatInfo);
2. ContextImpl appContext = ContextImpl.createAppContext
3. new Instrumentation().init(instrContext, appContext, ...)
4. Application app = data.info.makeApplication
5. installContentProviders(app, providers);
6. mInstrumentation.callApplicationOnCreate(app);

mActivityStackSupervisor.attachApplicationLocked
mActivityStackSupervisor.realStartActivityLocked
app.thread.scheduleLaunchActivity
mH.sendMessage(H.LAUCH_ACTIVITY, new ActivityClientRecord)
-> ActivityThread.handleLaunchActivity
        ActivityThread.performLaunchActivity
        1.Activity activity = mInstrumentation.newActivity(cl, component, intent)
        2.activity.attach(appContext, this, mInstrumentation, token, application, ...)
        3.mInstrumentation.callActivityOnCreate(activity)
-> ActivityThread.handleResumeActivity
        ActivityThread.performLaunchActivity
               1.ActivityRecordClient.activity.performResume
        Looper.myQueue().addIdleHandler(new Idler());
               1.ActivityManagerNative.getDefault().activityIdle(a.IApplicationToken)
               2.mActivityStackSupervisor.activityIdleInternalLocked
                   最后主要的是mActivityStackSupervisor中维护了一个mStoppingActivities队

                   列,在Activity被pause的时候会添加到里面,

               3.stack.stopActivityLocked(r)
               4.r.app.thread.scheduleStopActivity


以上已经完全分析了Activity的onPause、handleBindApplicationon、Create、onResume、onStop
-----------------------------------------------------------------------------------------------
Activity.finish
ActivityManagerNative.getDefault().finishActivity()
ActivityManagerService.finishActivity()
-----------------------------------------------------------------------------------------------



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值