android8.1 开机黑屏2s修复方案

软件版本:Android8.1

硬件版本:展讯平台

这两天解了一个bug,从某种意义上不算bug,而是优化,超有成就感,心路历程记录如下:

问题由来:屏厂上了一批次屏,而系统开机从动画停止到Launcher显示要黑2s左右,这个时间段会出现漏光的现象,甚为尴尬!

最开始查看了启动阶段的日志,做如下分析:

开始怀疑系统有延迟的操作甚至后台崩溃之类的错误,导致Launcher启动延时。
经过这两天分析启动日志,发现跟IflyrecSmartRecorder app关系不是很大,app应该有优化的空间,但跟这个问题相关性不大。
调试过程:
刷机启动后,删除IflyrecSmartRecorder.app,此时启动还是存在黑屏,排除IflyrecSmartRecorder的嫌疑(但app是可以做优化的)。
从启动日志看:

01-01 08:16:09.492 730 771 I WindowManager: ******* TELLING SURFACE FLINGER WE ARE BOOTED!
01-01 08:16:09.492 299 431 I SurfaceFlinger: Boot is finished (13413 ms)
这个时间节点开机动画完成,系统下一步要启动launcher

01-01 08:16:09.765 730 771 I WindowManager: All windows ready for display!
Windowmanager 可显示回调被调用。

01-01 08:16:10.067 730 1111 I ActivityManager: START u0

{act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.xf.setupwidzard/.WizardActivity}

from uid 0, pid 0
AM启动开机引导。

01-01 08:16:10.709 730 1111 I ActivityManager: START u0

{cmp=com.xf.setupwidzard/.WelcomeActivity}

from uid 1000, pid 1358
0.7s后启动activity

01-01 08:16:10.846 730 1016 D WindowManager: Input focus has changed to Window

{6953daf u0 com.xf.setupwidzard/com.xf.setupwidzard.WelcomeActivity}

主Activity获取焦点

01-01 08:16:10.983 730 771 I ActivityManager: Displayed com.xf.setupwidzard/.WelcomeActivity: +237ms (total +274ms)
主activity显示。

从开机动画完结到主界面显示,大概1.5s,在此过程中未见系统崩溃及其异常日志。

因此将该现象定性为系统正常启动的流程。

 

既然正常,那就尴尬了,该如何解决优化呢。。。

内行应该了解过,android7.0之后,引入了directboot模式,系统启动后,开机动画走完,是先走到了Settings下一个FallbackHome.java 的activity,这个里边再去引出真正的Launcher,而这个activity是没有任何布局文件的,所以该过程就黑了,怎么体现衔接性呢,由于我们的设备开机动画是静态的一张图片,因此想到了在进入这个activity之后,将背景设置为开机动画图片,从而实现了动画到launcher的无缝连接!!!

具体改动如下:

diff --git a/src/com/android/settings/FallbackHome.java b/src/com/android/settings/FallbackHome.java
index 5f7b639..0686ffa 100644
--- a/src/com/android/settings/FallbackHome.java
+++ b/src/com/android/settings/FallbackHome.java
@@ -64,6 +64,9 @@ public class FallbackHome extends Activity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+        //getWindow().getDecorView().setBackgroundColor(Color.WHITE);
+        Log.e(TAG, "=========  FallbackHome  start display picture  ==========");
+        getWindow().setBackgroundDrawableResource(R.drawable.start);

         // Set ourselves totally black before the device is provisioned so that
         // we don't flash the wallpaper before SUW
         mProvisioned = Settings.Global.getInt(getContentResolver(),
@@ -125,6 +128,8 @@ public class FallbackHome extends Activity {
                 Log.d(TAG, "User unlocked and real home found; let's go!");
                 getSystemService(PowerManager.class).userActivity(
                         SystemClock.uptimeMillis(), false);
+                //this.getWindow().getDecorView().setBackgroundColor(Color.WHITE);
+                Log.e(TAG, "=========  FallbackHome  stop display picture  ==========");

                 finish();
             }
         }

另外把start.png(开机图片)放至drawable目录。

 

So easy!迎刃而解~~~~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(android)