7.0StartingWindow  流程分析

本文详细分析了Android应用程序启动时StartingWindow的定制和FWK调用过程,包括如何设置启动页面主题,ActivityRecord与WindowToken的关系,以及WindowManager在显示StartingWindow时的角色。通过对ActivityRecord、Theme和WindowToken的探讨,揭示了StartingWindow从创建到显示的关键步骤。
摘要由CSDN通过智能技术生成

一 定制简单的 StartingWindow 
        <activity android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.StartingWindowTheme">
    <!-- 应用启动页(StartingWindow)的theme -->
    <style name="AppTheme.StartingWindowTheme" parent="AppTheme">
        <!-- 可以设置成纯颜色(设置一个和Activity UI相似的背景) -->
        <!--<item name="android:windowBackground">@color/startingwindow_bgcolor</item>-->
        <!--也可以设置成一张图片 -->
        <item name="android:windowBackground">@drawable/startingwindow_bg</item>
    </style>
二 FWK调用过程:
在startActivityLocked, resumeTopActivityInnerLocked,SHOW_APP_STARTING_PREVIEW 为true时,都有去调用showStartingWindow。

//当该activity运行在新的task中或者进程中时,需要在activity显示之前显示一个Starting Window
//在桌面点击时,Launcher先让自己做一个退出动画,APP还在activitystart阶段时由Launcher发出一个StartingWindow,等待app的第一帧绘制好后,再切换到APP的第一帧动画
    void showStartingWindow(ActivityRecord prev, boolean createIfNeeded) {
        final CompatibilityInfo compatInfo =
                service.compatibilityInfoForPackageLocked(info.applicationInfo);
        final boolean shown = service.mWindowManager.setAppStartingWindow(
                appToken, packageName, theme, compatInfo, nonLocalizedLabel, labelRes, icon,
                logo, windowFlags, prev != null ? prev.appToken : null, createIfNeeded);
        if (shown) {
            mStartingWindowState = STARTING_WINDOW_SHOWN;
        }
    }
    binder调用WMS中的setAppStartingWindow 调用成功说明启动了StartingWindow。
    
    public boolean setAppStartingWindow{
    //通过 Activity 的token 找windowtoken。这个token 创建:    ActivityRecord(ActivityMan

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值