android 12开始增加了新的功能,在app启动时会默认闪一下app的icon界面。
可以通过一下方法,从framework部分将这个功能默认关闭。参考文章如下:
https://blog.csdn.net/qq_44256828/article/details/129652422
这部分功能相关的代码位置在
frameworks/base/libs/windowmanager/shell/src/com/android/wm/shell/startingsurface目录。
一种方法:
frameworks/base/libs/windowmanager/shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java中,注释addStartingWindow中的内容。
public void addStartingWindow(StartingWindowInfo windowInfo) {
// mSplashScreenExecutor.execute(() -> {
// Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "addStartingWindow");
//
// final int suggestionType = mStartingWindowTypeAlgorithm.getSuggestedWindowType(
// windowInfo);
// final RunningTaskInfo runningTaskInfo = windowInfo.taskInfo;
// if (suggestionType == STARTING_WINDOW_TYPE_WINDOWLESS) {
// mStartingSurfaceDrawer.addWindowlessStartingSurface(windowInfo);
// } else if (isSplashScreenType(suggestionType)) {
// mStartingSurfaceDrawer.addSplashScreenStartingWindow(windowInfo, suggestionType);
// } else if (suggestionType == STARTING_WINDOW_TYPE_SNAPSHOT) {
// final TaskSnapshot snapshot = windowInfo.taskSnapshot;
// mStartingSurfaceDrawer.makeTaskSnapshotWindow(windowInfo, snapshot);
// }
// if (suggestionType != STARTING_WINDOW_TYPE_NONE
// && suggestionType != STARTING_WINDOW_TYPE_WINDOWLESS) {
// int taskId = runningTaskInfo.taskId;
// int color = mStartingSurfaceDrawer
// .getStartingWindowBackgroundColorForTask(taskId);
// if (color != Color.TRANSPARENT) {
// synchronized (mTaskBackgroundColors) {
// mTaskBackgroundColors.append(taskId, color);
// }
// }
// if (mTaskLaunchingCallback != null && isSplashScreenType(suggestionType)) {
// mTaskLaunchingCallback.accept(taskId, suggestionType, color);
// }
// }
//
// Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
// });
}
另一种方法:
在frameworks/base/services/core/java/com/android/server/wm/TaskOrganzierController.java中
boolean addStartingWindow(Task task, ActivityRecord activity, int launchTheme,
TaskSnapshot taskSnapshot) {
final Task rootTask = task.getRootTask();
if (rootTask == null || activity.mStartingData == null) {
return false;
}
final ITaskOrganizer lastOrganizer = getTaskOrganizer();
if (lastOrganizer == null) {
return false;
}
final StartingWindowInfo info = task.getStartingWindowInfo(activity);
if (launchTheme != 0) {
info.splashScreenThemeResId = launchTheme;
}
info.taskSnapshot = taskSnapshot;
info.appToken = activity.token;
// make this happen prior than prepare surface
// try {
// lastOrganizer.addStartingWindow(info);
// } catch (RemoteException e) {
// Slog.e(TAG, "Exception sending onTaskStart callback", e);
// return false;
// }
return true;
}