Android ActivityIdle调用栈

通知系统进行内存清理
IDLE_NOW_MSG
AMS::forceStopPackageLocked
    // native kill 
    ActivityStackSupervisor::scheduleIdleLocked

IDLE_TIMEOUT_MSG
completeResumeLocked
    scheduleIdleTimeoutLocked
activityIdle调用栈
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 清理调用栈
AppDeathRecipient::binderDied
    appDiedLocked // 限制引用被kill后,重新启动allowRestart
        handleAppDiedLocked // 如果引用在黑名单,则setPackageStoppedState 
            cleanUpApplicationRecordLocked
                // 正在启动的provider需要重启
            finishInstrumentationLocked
                    app.instrumentationClass = null
        willStart // restart
            addAppLocked

trimApplications 触发时机

activityStopped
finishReceiver
    trimApplications
        mRemovedProcesses// empty process
        // crash 的进程
        // 5秒内没有响应并被用户选在强制关闭的进程
        //应用开发这调用 killBackgroundProcess 想要杀死的进程
        if pid > 0
            app.kill
        else
            AppThread::onTerminate
            Looper.quit
            
        cleanUpApplicationRecordLocked
        addAppLocked // persistent

各种关闭当前Activity引起的内存回收

各种关闭当前Activity引起的内存回收
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容