What is the best way to launch an app and calculate its launch time in android(if it can be done with some code,then its better)
5 回答
嗯 - 首先,更准确地说,我应该指出,在 Android 中,您启动的是活动,而不是应用程序!
因此,由于您的应用程序的入口点是处理 LAUNCH 意图的 Activity,因此可以将您的问题解释为“如何测量活动启动时间”。
为此,我建议在这里查看活动生命周期:https ://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle 。
查看那里漂亮的图表,您会看到启动时间本质上是在和中花费onCreate()
的时间。onStart()
onResume()
为了衡量这一点,我建议使用traceview,因为这将真正向您展示您花费时间的所有细节!Debug.startMethodTracing("startUp");
在开头使用开始跟踪,在结尾处onCreate()
结束跟踪。onResume()
Debug.stopMethodTracing();
因为onCreate()
每个实例只调用一次,所以您甚至不必担心多次调用onResume()
,以防此活动被置于后台,因为您将调用两次 stop 方法,这没有害处!
玩得开心 - 我非常喜欢 traceview 的可能性!
为了快速做到这一点,我会使用 logcat,比如:
Log.d("tag", "starting");
/* code goes here */
Log.d("tag", "finished");
如果您想做更大的事情,请尝试Traceview。
你可以在这里找到答案——
对于 API 版本 19 或更高版本,此信息默认记录在 Logcat 上。关键是找对地方——
如果您从命令行或终端中跟踪 logcat 输出,则查找经过的时间很简单。要在 Android Studio 中查找经过的时间,您必须在 logcat 视图中禁用过滤器。禁用过滤器是必要的,因为系统服务器而不是应用程序本身提供此日志。
这是文档中的示例以确保完整性。
ActivityManager: Displayed com.android.myexample/.StartupTiming: +3s534ms
摘录来自文档。
会有一个类似的自动日志
system_process I/ActivityManager﹕ Displayed com.android.vending/com.google.android.finsky.activities.MainActivity: +549ms
显示应用程序从用户在其上输入到应用程序的启动时间,并准备好与用户进行更多交互。那是来自 ActivityManager。
另外,使用 log 来测量从 onCreate() 到 onResume 的时间应该是另一个好方法。
在上面的答案范围内,我想指出,由于 JIT 在分析时关闭,Traceview 无法提供实时。Traceview 是监控源代码执行时间的无用工具。(Traceview 是仅检查堆栈跟踪的好工具,如上所述,通过使用带有 startMethodTracing() 和 stopMethodTracing() 的 Debug 类)。
我建议使用 systrace(例如通过 Eclipse 插件),这是计算实时执行时间(以及许多其他功能)的最佳工具。
有关更多信息,请查看:http: //developer.android.com/tools/debugging/systrace.html
另外,我想指出,有时 systrace 不起作用(取决于 FS 映射)。
您需要检查'system\core\rootdir\init.rc'是否安装了正确的'debugfs'。应该是:'mount debugfs /sys/kernel/debug /sys/kernel/debug'