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!迎刃而解~~~~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章