開機嚮導wifi設定無法跳過
阿新 • • 發佈:2019-02-06
目前第一次開機(或者恢復出廠設定後開機)有以下兩個問題:
- 開機嚮導wifi設定介面skip按鈕置灰,等待一段時間後才可以點選跳過
- 開機動畫完成後黑屏一段時間才出現開機嚮導第一個介面
以上兩個問題並不會同時出現(即類似互斥關係)
WIFI設定介面無法skip問題,主要因為GmsCore得3個dex檔案做dex2oat時間太長導致:
- 由於手機防盜功能,開機嚮導在wifi設定介面需要判斷FRP的狀態來決定是否一定需要網路來登入Google賬戶驗證
- FRP狀態需要通過GmsCore的FrpService獲取,而FrpService需要等待GmsCore的3個外掛dex檔案做dex2oat完成後才能啟動
- 如果在開機嚮導的wifi設定介面,FrpService還沒有啟動起來,那麼這個時候skip按鈕就是置灰的;需要一直等待FrpService啟動後獲取到正確的FRP狀態後skip按鈕才可以點選
開機嚮導啟動前黑屏問題,關鍵在於從開機動畫完成到開機嚮導的第一個有介面activity啟動花費太長時間,而這個又是因為其它應用在開機階段首次執行時做dex2oat導致cpu loading幾乎100%:出現黑屏問題的時候,由於開機嚮導啟動時間被延後,所以在wifi設定介面時GmsCore的dex2oat已完成,這個時候可以正常通過FrpService獲取到frp狀態,從而可以一次性跳過;而未出現黑屏問題的時候,由於開機嚮導啟動時間早,所以在wifi設定介面時GmsCore的dex2oat還未完成,所以無法正常獲取frp狀態,導致無法skip
總結:
以上兩個問題都是同一個原因造成(App佔用CPU資源做dex2oat),只是對應的現象不一樣
解法主要從以下方面進行優化:
- 縮短GmsCore外掛做dex2oat時間
- 延遲開機嚮導啟動時間(加長開機動畫時間)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
/frameworks/base/services/core/java/com/android/server/am/ActivityStackSupervisor.java
import java.lang.Thread;
final int startActivityLocked(...)
{
...
if (err
== ActivityManager.START_SUCCESS) {
final int userId
= aInfo != null ?
UserHandle.getUserId(aInfo.applicationInfo.uid) : 0 ;
///M:
@{
ComponentName
SetupCmpName = intent.getComponent();
String
GMSSetupString = "com.google.android.setupwizard/.SetupWizardActivity" ;
if (userId
== 0 &&
SetupCmpName != null &&
GMSSetupString.equals(SetupCmpName.flattenToShortString())) {
int
sleepTimeMS
= 5000 ;//發現“啟動開機嚮導Activity的Intent”,那就先延時休眠5秒,給時間它做dex2oat
|