【转】获取Activity启动时间的三种方式

应用程序的启动时间也是衡量应用性能好坏的重要指标之一,所以我们来看一下如何获取一个程序启动所需的时间。

获取程序启动的时间有几种方法,详情见下文分析:

方法一:通过log获取。

思路:通过记录开始时间与结束时间,计算时间差来获取启动时间。

在onCreate()方法最后一行加入log.e(“TAG”,”"finish),通过查看logcat中的log输出来计算程序启动时间。

此种方法需要有源代码,并且比较原始,不推荐。

方法二:通过ActivityManager轮训来实现获取启动时间。

思路:通过轮训未出现时间与出现时间,计算时间差来获取启动时间。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActivityManager am = (ActivityManager) getSystemService(this.ACTIVITY_SERVICE);

        List<RunningAppProcessInfo> appinfo = am.getRunningAppProcesses();

        for (RunningAppProcessInfo runningAppProcessInfo : appinfo) {
            if (runningAppProcessInfo.processName.equals("yourpakagename")) {
                Log.e("TAG", System.currentTimeMillis() + "");
            }
        }

    }

  

此方法较第一种方法,不需要源代码,较精准。

方法三:通过外部调起应用(shell am)的方法来获取启动时间。

思路:通过Android shell 命令来调起应用获取启动时间。

adb shell am start -W -n yourpakagename/MainActivity

  

此法获取的启动时间非常精准,可精确到毫秒。

综上三种方法,方法一比较原始但是操作简单,适用于初学者用于要求不高的黑盒测试;方法二技术要求较高,适合于在手机上开发的应用对其他应用来检测启动时间;方法三适用于批量查看应用启动时间,缺点在于必须获取所有应用的LanuchActivity。

时间: 2024-10-09 09:59:21

【转】获取Activity启动时间的三种方式的相关文章

Java Class类以及获取Class实例的三种方式

T - 由此 Class 对象建模的类的类型.例如,String.class 的类型是Class<String>.如果将被建模的类未知,则使用Class<?>. [java] view plain copy print? public final class Class<T> extends Object  implements java.io.Serializable, java.lang.reflect.GenericDeclaration, java.lang.r

(六)、获取Keystone token的三种方式

让我们粗略看一下,三种从Keystone获得token的方式.在尝试这三种方式之前,你得确保已经装好Keystone终端.如果还没有装好,可以看grizzly安装版本的Keystone 安装部分. Note:这些呼叫都将请求的是Keystone v2版本. 假定你已经安装好,并且Keystone已经跑起来了:).然后接下来我们首先要做的便是,发一个简单的cURL发送请求: $ curl -d '{"auth": {"tenantName": "demo&q

Java反射获取class对象的三种方式,反射创建对象的两种方式

Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName 静态方法. 前提:已明确类的全路径名. 第二种,使用 .class 方法. 说明:仅适合在编译前就已经明确要操作的 Class 第三种,使用类对象的 getClass() 方法. 适合有对象示例的情况下 package com.reflection; /** * Created by Liuxd

java webservice服务器端获取request对象的三种方式

有的时候在webservice里我们需要获取request对象和response对象,比如想要获得客户端的访问ip的时候就需要这么做,下面说三种方式,当然三种方式可能是针对不同方式部署webservice获取request对象的方法. 第一种:先配置注入: @Resource private WebServiceContext webServiceContext; 其次是下面的代码: MessageContext mc = webServiceContext.getMessageContext(

获取字节码的三种方式

获取java字节码有三种方式,假设要获得的字节码的类为requireClass 1 使用类的静态方法 Class classOne = requireClass.class; 2 使用类对象的getClass方法 Class classTwo = requireClassInstance.getClass; 3 使用Class类的静态方法 Class.forName Class classThree = Class.forName("类的全路径名"); 在反射的实际应用中通常采用第三种

获取Class对象的三种方式

1:通过每个对象都具备的方法getClass来获取.弊端:必须要创建该类对象,才可以调用getClass方法. 2:每一个数据类型(基本数据类型和引用数据类型)都有一个静态的属性class.弊端:必须要先明确该类. 前两种方式不利于程序的扩展,因为都需要在程序使用具体的类来完成. 3:使用的Class类中的方法,静态的forName方法. 指定什么类名,就获取什么类字节码文件对象,这种方式的扩展性最强,只要将类名的字符串传入即可. // 1. 根据给定的类名来获得  用于类加载 String c

反射获取Class对象的三种方式

import cn.qujianlei.domain.Person; public class ReflectDemo { public static void main(String[] args) throws ClassNotFoundException { /* * * 反射技术:动态的获取类以及类中的成员,并可以调用该类的成员. * 以前有什么类就new什么对象. * 现在没有类,给什么类就new什么对象. * * * 反射技术的出现提高了程序的扩展性 * 反射技术中最重要的一点:先获

获取tr td 的三种方式

     /* 第一种,原生的js,先获取table然后获取tr标签,然后遍历td */ //       $('#selectIds').val(""); //        var table = document.getElementById("tb_table");//获取第一个表格   //           var array = table.getElementsByTagName("tr");//所有tr //         

jdbc 获取connection 对象的三种方式

获取数据库连接方法一:驱动实现类 1 //创建mysql的Driver对象 2 Driver driver=new com.mysql.jdbc.Driver(); 3 //jdbc url 定位一个数据库: 4 String url="jdbc:mysql://localhost:3306/jdbcdb"; 5 //用于存储用户名和密码 6 Properties info=new Properties(); 7 info.put("user", "roo