Android12 SplashScreen默认闪屏页透明化

android12 默认闪屏页透明化

两种方式:

  1. app入口activity 主题theme添加以下item
    <!-- 闪屏页透明 跳转该activity相当于弹出dialog(悬浮窗口) -->
    <item name="android:windowIsTranslucent">true</item>

注:

  • 在styles.xml 入口activity的样式中添加如上item,即可透明化闪屏页
  • 添加该属性后,会有副作用: A activity跳转到添加该属性的B应用(入口activity)时,B应用会以悬浮弹窗dialog的形式显示在A activity的上面,A activity 会走onPause(),不会走onStop()
  • 判断diolog是否会对当前的activity生命周期造成影响:
    1. 生命周期回调都是 AMS 通过 Binder 通知应用进程调用的;而弹出 Dialog、Toast、PopupWindow 本质上都直接是通过 WindowManager.addView() 显示的(没有经过 AMS),所以不会对生命周期有任何影响
    2. 弹出主题是dialog的activity会走onPause()方法,不会走onStop()。因为前一个activity还是可见的,只是失去焦点,页面不可见才会回调onstop
  1. framework层: 在添加闪屏页view时将其隐藏、设置透明度为0 ,置null
+++ b/frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java
@@ -320,6 +320,12 @@ public class StartingSurfaceDrawer {
                 // if view == null then creation of content view was failed.
                 if (contentView != null) {
                     try {
 +                        boolean isFilter = "com.gestwr.demo".equals(activityInfo.packageName);
 +                        if (isFilter){
 +                            Slog.d("gestwr", "isFilter : contentView == null ");
 +                            contentView = null;
 +                        } else {
 +                            rootLayout.addView(contentView);
 +                        }
                     } catch (RuntimeException e) {
                         Slog.w(TAG, "failed set content view to starting window "

补:

  • 默认闪屏页黑色背景
// frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java
 	attrs.mWindowBgColor = Color.BLACK; 
  • 去除应用启动时预先启动的闪屏页
diff --git a/frameworks/base/services/core/java/com/android/server/wm/TaskOrganizerController.java b/frameworks/base/services/core/java/com/android/server/wm/TaskOrganizerController.java
old mode 100644
new mode 100755
index d619547..0ccdf7d
--- a/frameworks/base/services/core/java/com/android/server/wm/TaskOrganizerController.java
+++ b/frameworks/base/services/core/java/com/android/server/wm/TaskOrganizerController.java
@@ -657,12 +657,12 @@
         }
         info.taskSnapshot = taskSnapshot;
         // make this happen prior than prepare surface
-        try {
+       /* try {
             lastOrganizer.addStartingWindow(info, activity.token);
         } catch (RemoteException e) {
             Slog.e(TAG, "Exception sending onTaskStart callback", e);
             return false;
-        }
+        }*/
         return true;
     }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值