阅读:7919回复:2
Android Direct Boot黑屏问题
为了支持Direct Boot模式,系统提供了两个存储数据的地方:
1.Credential encrypted storage,默认存储数据的地方,仅在用户解锁手机后可用。 2.Device encrypted storage,主要对应的就是Direct Boot使用的存储空间。在Direct Boot模式下和用户解锁手机后都可以使用的存储空间 一般情况下,应用是无法在Direct Boot模式下运行的 如果需要某个app能够在Direct Boot模式下运行,需要注册相关APP的组。 应用组件申请在Direct Boot模式下运行:在AndroidManinfest.xml中设置 android:directBootAware="true"。 android 7.0 在启动Launcher之前会先启动一个FallbackHome,之后才会启动Launcher,通过调查发现FallbackHome属于Settings中的一个activity,Settings的android:directBootAware为true,并且FallbackHome在category中配置了Home属性,而Launcher的android:directBootAware为false,所有只有FallbackHome可以在direct boot模式下启动。 所以在ActivityManagerService启动Home界面时,从PackageManagerService(boolean startHomeActivityLocked)中获取到的Home界面就是FallbackHome 现在启动Launcher时多了一个流程,导致启动launcher比原来6.0要慢(大约4S)。这4S有时会造成设备黑屏 4S时间黑屏问题处理方法: 1.Launcher里配置属性 android:directBootAware="true",简单有效。 2.如果不能修改launcher的情况下,去除黑屏的方法:延长开机动画的显示时间,等到4s时间过去之后,显示launcher 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 779a0dd..8043471 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -3434,7 +3434,7 @@ && getDefaultDisplayContentLocked().checkWaitingForWindows()) { return; } - + /* if (!mBootAnimationStopped) { Trace.asyncTraceBegin(TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0); // stop boot animation @@ -3443,7 +3443,7 @@ SystemProperties.set("service.bootanim.exit", "1"); mBootAnimationStopped = true; } - + if (!mForceDisplayEnabled && !checkBootAnimationCompleteLocked()) { if (DEBUG_BOOT) Slog.i(TAG_WM, "performEnableScreen: Waiting for anim complete"); return; @@ -3462,6 +3462,7 @@ } catch (RemoteException ex) { Slog.e(TAG_WM, "Boot completed: SurfaceFlinger is dead!"); } + */ EventLog.writeEvent(EventLogTags.WM_BOOT_ANIMATION_DONE, SystemClock.uptimeMillis()); Trace.asyncTraceEnd(TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0); 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 75f2723..83db16a --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -163,6 +163,8 @@ import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; +import android.os.SystemProperties; +import android.os.SystemService; import android.os.Trace; import android.os.UserHandle; import android.os.storage.StorageManager; @@ -2075,6 +2077,21 @@ @Override public void onWindowsDrawn(long timestamp) { synchronized (service) { + //Launcher is drawn completed,box can exit bootanim + if(shortComponentName!=null && !shortComponentName.contains(".FallbackHome") && !"1".equals(SystemProperties.get("service.bootanim.exit"))) + { + boolean wallpaperEnabled = service.mContext.getResources().getBoolean( + com.android.internal.R.bool.config_enableWallpaperService); + if(wallpaperEnabled){ + try { + Thread.sleep(1000); + } catch (Exception e) { + } + } + SystemProperties.set("service.bootanim.exit", "1"); + } mStackSupervisor.getActivityMetricsLogger().notifyWindowsDrawn(getWindowingMode(), timestamp); if (displayStartTime != 0) { |
|
沙发#
发布于:2019-07-27 09:38
不错,感谢分享,学习一下
|
|
|
板凳#
发布于:2019-07-28 09:47
|
|
|