美文网首页
开机启动时间优化(高通平台)

开机启动时间优化(高通平台)

作者: 赛非斯 | 来源:发表于2022-01-13 17:53 被阅读0次

最近客户纠结开机慢的问题,以此记录方便日后查看

  • 客户期望的是17s,我特意拿了pixel4xl看开机logo大约13s,看到系统界面差不多18s左右,看来客户的要求是有依据的
  • 这类问题的分析,我们首先要收集信息
    1、eventlog里面打印的时间boot_progress,这里打印的是进入用户空间的各个阶段的时间
 E:\work\gatalllog\getlog_20220112\events.log (匹配11次)
    行 3: 01-03 02:19:40.237 I/boot_progress_start(  707): 2340
    行 282: 01-03 02:19:40.459 I/boot_progress_preload_start(  707): 2562
    行 532: 01-03 02:19:41.013 I/boot_progress_preload_end(  707): 3116
    行 540: 01-03 02:19:41.533 I/boot_progress_system_run( 1110): 3636
    行 555: 01-03 02:19:41.976 I/boot_progress_pms_start( 1110): 4079
    行 556: 01-03 02:19:42.078 I/boot_progress_pms_system_scan_start( 1110): 4181
    行 837: 01-03 02:19:42.837 I/boot_progress_pms_data_scan_start( 1110): 4939
    行 838: 01-03 02:19:42.845 I/boot_progress_pms_scan_end( 1110): 4948
    行 841: 01-03 02:19:42.941 I/boot_progress_pms_ready( 1110): 5044
    行 871: 01-04 14:09:25.224 I/boot_progress_ams_ready( 1110): 6428
    行 957: 01-04 14:09:25.871 I/boot_progress_enable_screen( 1110): 7075

2、这里告诉系统已经启动完成

01-11 16:57:07.724 I/WindowManager( 1388): ******* TELLING SURFACE FLINGER WE ARE BOOTED!
01-11 16:57:07.724 I/SurfaceFlinger(  892): Boot is finished (6505 ms)

3、观察现象特意注意到了开机动画结束到launcher启动中间有4s的黑屏。查看log 这刚刚好4s左右,说明这个阶段一致卡在userunlock的地方。想了解具体逻辑的可以看FallbackHome部分代码

    行 961: 12-16 19:48:36.866 I/am_create_activity( 1207): [0,247417627,1,com.android.settings/.FallbackHome,android.intent.action.MAIN,NULL,NULL,276824320]
    行 991: 12-16 19:48:37.084 I/am_proc_start( 1207): [0,1993,1000,com.android.settings,activity,{com.android.settings/com.android.settings.FallbackHome}]
    行 997: 12-16 19:48:37.108 I/am_restart_activity( 1207): [0,247417627,1,com.android.settings/.FallbackHome]
    行 998: 12-16 19:48:37.109 I/am_set_resumed_activity( 1207): [0,com.android.settings/.FallbackHome,minimalResumeActivityLocked]
    行 1004: 12-16 19:48:37.167 I/am_on_create_called( 1993): [0,com.android.settings.FallbackHome,performCreate]
    行 1005: 12-16 19:48:37.168 I/am_on_start_called( 1993): [0,com.android.settings.FallbackHome,handleStartActivity]
    行 1006: 12-16 19:48:37.168 I/am_on_resume_called( 1993): [0,com.android.settings.FallbackHome,RESUME_ACTIVITY]
    行 1007: 12-16 19:48:37.175 I/am_on_top_resumed_gained_called( 1993): [0,com.android.settings.FallbackHome,topStateChangedWhenResumed]
    行 1009: 12-16 19:48:37.242 I/sysui_multi_action( 1207): [319,274,322,389,325,6,757,761,758,7,759,3,806,com.android.settings,871,com.android.settings.FallbackHome,905,0,945,263,1320,5,1321,2]
    行 1010: 12-16 19:48:37.246 I/am_activity_launch_time( 1207): [0,247417627,com.android.settings/.FallbackHome,389]
    行 1094: 12-16 19:48:40.653 I/am_finish_activity( 1207): [0,247417627,1,com.android.settings/.FallbackHome,app-request]
    行 1095: 12-16 19:48:40.654 I/am_pause_activity( 1207): [0,247417627,com.android.settings/.FallbackHome,userLeaving=false]
    行 1096: 12-16 19:48:40.656 I/am_on_top_resumed_lost_called( 1993): [0,com.android.settings.FallbackHome,topStateChangedWhenResumed]
    行 1097: 12-16 19:48:40.657 I/am_on_paused_called( 1993): [0,com.android.settings.FallbackHome,performPause]
    行 1184: 12-16 19:48:40.922 I/am_destroy_activity( 1207): [0,247417627,1,com.android.settings/.FallbackHome,finish-idle]
    行 1185: 12-16 19:48:40.923 I/am_on_stop_called( 1993): [0,com.android.settings.FallbackHome,LIFECYCLER_STOP_ACTIVITY]
    行 1187: 12-16 19:48:40.930 I/am_on_destroy_called( 1993): [0,com.android.settings.FallbackHome,performDestroy]

4、如何解决这4s的黑屏,让launcher丝滑早点启动。于是想到了direct-boot模式。settings就是设置了这个模式FallbackHome才能在用户还没unlock的时候启动的
https://developer.android.google.cn/training/articles/direct-boot#java

  • 具体做法就是:
    1、清单中将 android:directBootAware 属性设为 true
    2、写了一个简单的例子
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivityTAG";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_USER_UNLOCKED));
        if (getSystemService(UserManager.class).isUserUnlocked()){
            Log.d(TAG,"cxylog-->class{MainActivity}_method{onCreate}:unlocked do access storage ");
        }else{
            Log.d(TAG,"cxylog-->class{MainActivity}_method{onCreate}:not unlocked do access storage later");
        }
    }
    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (getSystemService(UserManager.class).isUserUnlocked()){
                Log.d(TAG,"cxylog-->class{MainActivity}_method{onReceive}:unlocked do access storage ");
            }
        }
    };
}

3、如需在没有unlock的时候访问设备加密存储,通过调用 [Context.createDeviceProtectedStorageContext()](https://developer.android.google.cn/reference/android/content/Context#createDeviceProtectedStorageContext()) 创建另一个 [Context](https://developer.android.google.cn/reference/android/content/Context) 实例。通过此上下文发出的所有存储 API 调用均访问设备加密存储

    Context directBootContext = appContext.createDeviceProtectedStorageContext();
    // Access appDataFilename that lives in device encrypted storage
    FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
    // Use inStream to read content...

相关文章

网友评论

      本文标题:开机启动时间优化(高通平台)

      本文链接:https://www.haomeiwen.com/subject/tdancrtx.html