开机黑屏问题

https://blog.csdn.net/dpppppp/article/details/81941550

https://blog.csdn.net/kongbaidepao/article/details/81412926

描述:开机进入到keyguard的时候会有2s的黑屏。

调试,在关键地方加入log:

01-01 14:05:15.535  2612  2612 I WindowManager: Tim_Boot systemReady bindKeyguardNow=false
01-01 14:05:17.388  4282  4282 D FallbackHome: Tim_Boot FallBackHome onCreate mProvisioned=true
01-01 14:05:17.413  4282  4282 D FallbackHome: Tim_Boot FallBackHome maybeFinish isUserUnlocked=false
01-01 14:05:17.421  4282  4282 D FallbackHome: Tim_Boot FallBackHome onResume=true
01-01 14:05:17.635  2612  2797 I WindowManager: Tim_Boot systemBooted bindKeyguardNow=true
01-01 14:05:19.152  2612  3011 I WindowManager: Tim_Boot performEnableScreen: Waiting for anim complete not return
01-01 14:05:19.157  2612  3011 I WindowManager: Tim_Boot performEnableScreen: Waiting for anim complete not return
01-01 14:05:19.158  2612  3011 I WindowManager: Tim_Boot performEnableScreen: Waiting for anim complete not return
01-01 14:05:19.167  2612  3011 I WindowManager: Tim_Boot performEnableScreen: Waiting for anim complete not return
01-01 14:05:19.369  2612  3011 I WindowManager: Tim_Boot performEnableScreen: mDisplayEnabled=true mForceDisplayEnabled=false mShowingBootMessages=false mSystemBooted=true mOnlyCore=false mBootAnimationStopped=true
01-01 14:05:19.468  2612  3011 D ActivityManager: Tim_Boot Finishing user boot 0
01-01 14:05:19.471  2612  3011 W ActivityManager: Tim_Boot finishUserUnlocking userId=0
01-01 14:05:21.262  2612  2797 W ActivityManager: Tim_Boot ACTION_USER_UNLOCKED was sent
01-01 14:05:21.264  2612  2797 W ActivityManager: Tim_Boot service.bootanim.exit set 1,exit bootanimation
01-01 14:05:21.323  4282  4282 D FallbackHome: Tim_Boot FallBackHome BroadcastReceiver received
01-01 14:05:21.411  4282  4282 D FallbackHome: Tim_Boot FallBackHome maybeFinish isUserUnlocked=true
01-01 14:05:21.426  4282  4282 D FallbackHome: Tim_Boot User unlocked and real home found; let's go!
01-01 14:05:21.507  4282  4282 D FallbackHome: Tim_Boot FallBackHome onPause=true
01-01 14:05:23.072  4282  4282 D FallbackHome: Tim_Boot FallBackHome onDestroy=true

开机的时候有一个解锁的过程,只有解锁完后手机才能正常使用。

X:\msm8976-LA.BR.1.3.6.c2-01420\frameworks\native\services\surfaceflinger\SurfaceFlinger_hwc1.cpp

void SurfaceFlinger::bootFinished()
{
    const nsecs_t now = systemTime();
    const nsecs_t duration = now - mBootTime;
    ALOGI("Tim_Boot Boot is finished (%ld ms)", long(ns2ms(duration)) );
    mBootFinished = true;

    // wait patiently for the window manager death
    const String16 name("window");
    sp<IBinder> window(defaultServiceManager()->getService(name));
    if (window != 0) {
        window->linkToDeath(static_cast<IBinder::DeathRecipient*>(this));
    }

    // 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.
    //property_set("service.bootanim.exitfake", "1");
    property_set("service.bootanim.exit", "1");


    const int LOGTAG_SF_STOP_BOOTANIM = 60110;
    LOG_EVENT_LONG(LOGTAG_SF_STOP_BOOTANIM,
                   ns2ms(systemTime(SYSTEM_TIME_MONOTONIC)));
}

frameworks\base\cmds\bootanimation\BootAnimation.cpp

void BootAnimation::checkExit() {
    // Allow surface flinger to gracefully request shutdown
    char value[PROPERTY_VALUE_MAX];
    property_get(EXIT_PROP_NAME, value, "0");
    int exitnow = atoi(value);
    if (exitnow) {
        requestExit();
    }
}

 

 

 

解决方案一,增加适当的延迟关闭动画,此方法没有找到问题根源。

diff --git a/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java b/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
old mode 100644
new mode 100755
index 149d1dc..fb38c1f
--- a/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -75,6 +75,7 @@ import android.os.SystemService;
 import android.os.Trace;
 import android.os.UserHandle;
 import android.os.WorkSource;
+import android.os.UserManager;
 import android.provider.Settings;
 import android.util.ArraySet;
 import android.util.DisplayMetrics;
@@ -6063,12 +6064,6 @@ public class WindowManagerService extends IWindowManager.Stub
 
     public void performEnableScreen() {
         synchronized(mWindowMap) {
             if (mDisplayEnabled) {
                 return;
             }
@@ -6081,28 +6076,33 @@ public class WindowManagerService extends IWindowManager.Stub
                 return;
             }
 
-            if (!mBootAnimationStopped) {
-                // Do this one time.
-                Trace.asyncTraceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0);
-                try {
-                    IBinder surfaceFlinger = ServiceManager.getService("SurfaceFlinger");
-                    if (surfaceFlinger != null) {
-                        //Slog.i(TAG_WM, "******* TELLING SURFACE FLINGER WE ARE BOOTED!");
-                        Parcel data = Parcel.obtain();
-                        data.writeInterfaceToken("android.ui.ISurfaceComposer");
-                        surfaceFlinger.transact(IBinder.FIRST_CALL_TRANSACTION, // BOOT_FINISHED
-                                data, null, 0);
-                        data.recycle();
-                    }
-                } catch (RemoteException ex) {
-                    Slog.e(TAG_WM, "Boot completed: SurfaceFlinger is dead!");
-                }
-                mBootAnimationStopped = true;
-            }
+              if (!mBootAnimationStopped) {
+                   // Do this one time.
+                   Trace.asyncTraceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0);
+                   mH.postDelayed(new Runnable() {
+                       @Override
+                       public void run() {
+                           try {
+                               IBinder surfaceFlinger = ServiceManager.getService("SurfaceFlinger");
+                               if (surfaceFlinger != null) {
+                                   //Slog.i(TAG_WM, "******* TELLING SURFACE FLINGER WE ARE BOOTED!");
+                                   Parcel data = Parcel.obtain();
+                                   data.writeInterfaceToken("android.ui.ISurfaceComposer");
+                                   surfaceFlinger.transact(IBinder.FIRST_CALL_TRANSACTION, // BOOT_FINISHED
+                                           data, null, 0);
+                                   data.recycle();
+                               }
+                           } catch (RemoteException ex) {
+                               Slog.e(TAG_WM, "Boot completed: SurfaceFlinger is dead!");
+                           }
+                       }
+                   },5000);
+                   mBootAnimationStopped = true;
+               }
 
             if (!mForceDisplayEnabled && !checkBootAnimationCompleteLocked()) {
-                if (DEBUG_BOOT) Slog.i(TAG_WM, "performEnableScreen: Waiting for anim complete");
-                return;
+                if (DEBUG_BOOT) Slog.i(TAG_WM, "Tim_Boot performEnableScreen: Waiting for anim complete not return");
+                //return;
             }
 
             EventLog.writeEvent(EventLogTags.WM_BOOT_ANIMATION_DONE, SystemClock.uptimeMillis());

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值