android12 默认闪屏页透明化
两种方式:
- 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生命周期造成影响:
- 生命周期回调都是 AMS 通过 Binder 通知应用进程调用的;而弹出 Dialog、Toast、PopupWindow 本质上都直接是通过 WindowManager.addView() 显示的(没有经过 AMS),所以不会对生命周期有任何影响
- 弹出主题是dialog的activity会走onPause()方法,不会走onStop()。因为前一个activity还是可见的,只是失去焦点,页面不可见才会回调onstop
- 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;
}