通知系統(tǒng)進(jìn)行內(nèi)存清理
IDLE_NOW_MSG
AMS::forceStopPackageLocked
// native kill
ActivityStackSupervisor::scheduleIdleLocked
IDLE_TIMEOUT_MSG
completeResumeLocked
scheduleIdleTimeoutLocked
activityIdle調(diào)用棧
activityIdleInternalLocked
AMS::scheduleAppGcsLocked // 1. ActivityIdle 2. 串行廣播處理完成
mProcessesToGc// ProcessRecord
Message// GC_BACKGROUND_PROCESSES_MSG
performAppGcsIfAppropriateLocked
if canGcNow
performAppGcsLocked
performAppGcLocked //
AppThread::scheduleLowMemory
else
scheduleAppGcsLocked // Still not idle, wait some more.
stops // ArrayList<ActivityRecord>
if r.finishing
finishCurrentActivityLocked
else
stopActivityLocked
mFinishingActivities // ActivityRecord
destroyActivityLocked
instrumentationClass 清理調(diào)用棧
AppDeathRecipient::binderDied
appDiedLocked // 限制引用被kill后,重新啟動(dòng)allowRestart
handleAppDiedLocked // 如果引用在黑名單,則setPackageStoppedState
cleanUpApplicationRecordLocked
// 正在啟動(dòng)的provider需要重啟
finishInstrumentationLocked
app.instrumentationClass = null
willStart // restart
addAppLocked
trimApplications 觸發(fā)時(shí)機(jī)
activityStopped
finishReceiver
trimApplications
mRemovedProcesses// empty process
// crash 的進(jìn)程
// 5秒內(nèi)沒有響應(yīng)并被用戶選在強(qiáng)制關(guān)閉的進(jìn)程
//應(yīng)用開發(fā)這調(diào)用 killBackgroundProcess 想要?dú)⑺赖倪M(jìn)程
if pid > 0
app.kill
else
AppThread::onTerminate
Looper.quit
cleanUpApplicationRecordLocked
addAppLocked // persistent
各種關(guān)閉當(dāng)前Activity引起的內(nèi)存回收

各種關(guān)閉當(dāng)前Activity引起的內(nèi)存回收