怎样看网站是谁做的,马鞍山什么房产网站做的好,文化建设的内容,域名有免费的吗1、要分析的问题
1、与正常trace比对#xff0c;确认过耗时在哪个步骤#xff08;am create/pause/stop/start/doframe)#xff1f;
2、与正常trace比对#xff0c;确认过耗时在哪个cpu state(Running/Runnable/Sleep/Uninterruptible Sleep)#xff1f;
2、启动分析
…1、要分析的问题
1、与正常trace比对确认过耗时在哪个步骤am create/pause/stop/start/doframe)
2、与正常trace比对确认过耗时在哪个cpu state(Running/Runnable/Sleep/Uninterruptible Sleep)
2、启动分析
所谓冷启动就是启动该应用时后台没有该应用的进程此时系统会为该应用创建新的进程之后会bindApplication来创建程并初始化application, 然后通过反射执行ActivityThread中的main方法。 而热启动则是当启动应用时后台已经存在该应用的进程比如启动该应用后再按home 键反馈至主界面后再打开该应用。此时会从已有的进程中来启动应用这种方式不会重新走bindApplication的动作。
1、冷启动流程Cold Launch Flow : android.intent.action.MAIN决定应用的入口Activity也就是我们启动应用时首先显示哪一个Activity。 android.intent.category.LAUNCHER表示activity应该被列入系统的启动器(launcher)(其本质也是一个APP)。 凡是声明了上面filter的activity都会被launcher解析出来对应图标排列在桌面。这样用户就可以通过点击的方式启动Activity了。
当我们点击APP图标的时候首先会调用launcher的onClick()方法然后会通过添加intent.addflag(Intent.FLAG_ACTIVITY_NEW_TASK)通过调用Activity类的startActivity方法先pause前台的launcher然后resume想启动想要启动的activity。其细节流程如下:
1.1、onclick - startActivity 1.2、startActivityUnchecked - resumreFocusedStackTopActivityLocked 1.3、reasumeFocusedStackTopActivityLocked startProcessLocked中会上图中Activity所在进程的app已经存在部分可以理解成热启动流程而下面restarting部分则为冷启动部分
1.4、冷启动的后续部分 1.5 2、热启动流程Activity Resume Flow 前面已经提到热启动流程跟冷启动流程最主要的区别就热启动流程因为原有相关进程已经在后台所以只需要resume相关activity就好
3、systrace分析
了解上面的code流程后我们从systrace中再次看下对应的冷热启动的流程和时间序列systrace的抓取和基本操作请参考 如果用monitor抓取请勾选system_server、IRQ Events、CPU frequency CPU Idle、binder kernel driver、 binder global lock trace几项。
3.1 冷启动对应systrace
打开systrace之后先按ctrlF搜索inputreader找到systremserver下的inputReader 进程然后再其运行状态中找到AppLaunch_dispatchPtr:Up的时间点也就是手指离开屏幕的时间点。 然后找到启动的app 的UI threadcheck 其ActivityThreadMain-bindApplication-StartActivity-activityResume-Choreographer#doFrame -draw → RenderThread(DrawFrame)。 利用systrace工具中的框选标记从AppLaunch_dispatchPtr:Up到RenderThread(DrawFrame)完成的时间则为该app 冷启动画完第一帧的使用时间。若有launcher时间长的问题请将上面各个时间节点拆分比较和对比机对比检测出花费时间长的时间段。再细看时间长的原因 详细原因
3.2 如何分析launcher时间慢的问题
3.3.1 Launcher时间拆分
先按照上面的冷热启动的介绍将launcher的时间拆分
3.3.2、 定位差异部分
定位出某个花费时间长的时间段后框选该时间段的进程运行状态在下面的Thread Timeslices中可以查看该时间段的进程运行状态。找出时间差异大tag的cpu status Running/Runnable/Sleeping/Uninterruptible sleep 确认running/sleeping/runnable/uninterruptible sleep时间长之后根据本文其它栏位中其对应的debug方法进一步确认。