Launch Time of an app

旧城冷巷雨未停 提交于 2019-11-30 16:08:03
Zordid

Hmm - first, to be more precise, I should point out that in Android you start activities, rather than applications!

So, as your entry point to your application is the Activity which handles the LAUNCH intent, one could interpret your question as "how to measure activity start up time".

For this, I suggest to look at an Activities lifecycle here: https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle.

Looking at the nice graph there, you see that startup time is essentially the time that is spent in onCreate(), onStart() and onResume().

To measure that, I would suggest to use traceview as this will really show you in all its detail where you spent your time! Start tracing using Debug.startMethodTracing("startUp"); in the beginning of onCreate() and end tracing at the end of onResume() with Debug.stopMethodTracing();.

Because onCreate() is only called once per instance, you don't even have to worry about multiple calls to onResume() in case this activity will be put to the background as you will call the stop method twice, which is no harm!

Have fun - I like the possibilities of traceview very much!

To do it fast I would use logcat, something like:

Log.d("tag", "starting");
/* code goes here */
Log.d("tag", "finished");

If you want to do something bigger, try Traceview.

There will be an automatic log something like

system_process I/ActivityManager﹕ Displayed com.android.vending/com.google.android.finsky.activities.MainActivity: +549ms

to show the launch time of an app from the user typing on it to the app be ready to interact with user further more. That is from ActivityManager.

Also, using log to measure the time from onCreate() to onResume should be another good way.

user2520215

You could find the answer here -

This information gets logged on Logcat by default for API version 19 or higher. The key is looking for it in the right place -

If you’re tracking logcat output from the command line, or in a terminal, finding the elapsed time is straightforward. To find elapsed time in Android Studio, you must disable filters in your logcat view. Disabling the filters is necessary because the system server, not the app itself, serves this log.

Here is the example from the documentation for completeness.

ActivityManager: Displayed com.android.myexample/.StartupTiming: +3s534ms

The extracts are from the documentation.

In scope of answers above I would like to note, what the Traceview unable to provide the real time, due to JIT is turned off while profiling. The Traceview is the useless tool to monitor the time of executing of source's code. (Traceview is a good tools to check stacktrace only, as mentioned above by using Debug class with startMethodTracing() and stopMethodTracing()).

I suggest to use systrace (via Eclipse plugin, for an example) this is best tool to calculate the real time of executing (and many other features).

For more information take a look at: http://developer.android.com/tools/debugging/systrace.html

Also, I want to note that sometimes systrace will not work (depends from FS mapping).

You need to check 'system\core\rootdir\init.rc' with correct of 'debugfs' mounted. Should be as: 'mount debugfs /sys/kernel/debug /sys/kernel/debug'

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!