android8.1 去除android正在启动弹窗
在启动launcher前,系統先启动了一个FallbackHome的界面,接着再启动launcher,,即先显示一段时间的壁紙,再启动launcher。
在使用定制launcher的时候,在进入launcher之前,就先显示了一张壁纸,看起来会很不协调。
解决思路是延长开机动画显示(即是开机动画结束之前,FallbackHome的流程已经finish)
service.bootanim.exit这个属性是结束退出开机动画的
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java old mode 100644 new mode 100755 index 5ac2552..9f218e8 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -3522,13 +3522,15 @@ public class WindowManagerService extends IWindowManager.Stub && getDefaultDisplayContentLocked().checkWaitingForWindows()) { return; } - + +/* if (!mBootAnimationStopped) { Trace.asyncTraceBegin(TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0); // stop boot animation // formerly we would just kill the process, but we now ask it to exit so it // can choose where to stop the animation. SystemProperties.set("service.bootanim.exit", "1"); + Log.d("wmc","service.bootanim.exit...."); mBootAnimationStopped = true; } @@ -3550,7 +3552,7 @@ public class WindowManagerService extends IWindowManager.Stub } catch (RemoteException ex) { Slog.e(TAG_WM, "Boot completed: SurfaceFlinger is dead!"); } - +*/
这里屏蔽了系統结束开机动画的代码,那就得找一个地方结束开机动画,从而启动launcher。
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java old mode 100644 new mode 100755 index ee23d63..166bbd5 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -181,6 +181,7 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Objects; +import android.os.SystemProperties; /** * An entry in the history stack, representing an activity. @@ -1926,13 +1927,33 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo } } + private void stopBootanim() { + boolean wallpaperEnabled = service.mContext.getResources().getBoolean( + com.android.internal.R.bool.config_enableWallpaperService); + if(wallpaperEnabled){ + Log.d(TAG,"----Launcher drawn done,not keyguradk,has wallpaper,ummmmmm----"); + try { + Thread.sleep(1000); + } catch (Exception e) { + } + } + Log.d("wmc","----launcher drawn done,exit bootanim----"); + SystemProperties.set("service.bootanim.exit", "1"); + } + @Override public void onWindowsDrawn(long timestamp) { + //start 退出开机动画 + if(shortComponentName!=null && !shortComponentName.contains(".FallbackHome") + && !"1".equals(SystemProperties.get("service.bootanim.exit"))){ + stopBootanim(); + } synchronized (service) { mStackSupervisor.mActivityMetricsLogger.notifyWindowsDrawn(getStackId(), timestamp); if (displayStartTime != 0) { reportLaunchTimeLocked(timestamp); } + mStackSupervisor.sendWaitingVisibleReportLocked(this); startTime = 0; finishLaunchTickingLocked();
参考:https://blog.csdn.net/androidzmm/article/details/128285719
http://hk.javashuo.com/article/p-ulodmqym-dx.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!