从图片对比的角度看启动时间

目前测启动时间用得较多的方法:

1.am start -W  只获取activity的启动时间

-W:等目标Activity启动后才返回

-n:用于设置Intent的Component

2.高速相机  以真实的用户体验去获取应用的启动时间

第一种可能得不到我们想要的。

第二种过于依赖硬件设备

  • 冷启动:这时候你的应用程序的进程是没有创建的. 这也是大部分应用的使用场景.用户在桌面上点击你应用的 icon 之后,首先要创建进程,然后才启动 MainActivity.用户在桌面上点击这个 Activity 的时候,系统会直接起这个 Activity. 我们知道 Activity 在启动的时候会走 onCreate/onStart/onResume .这几个回调函数.
  • 热启动:如果是你按Back键,并没有将应用进程杀掉的话,那么执行上述命令就会快一些,因为不用创建进程了,只需要启动一个Activity即可。这也就是我们说的应用热启动。

扩展一种方法:

以高速相机的对比思维获取启动时间,采用图片对比的方式:

存在两个重点:

1.快速截图

2.高效对比图片

下面采用的是uiuatomator完成以上的两点:

第一个是快速截图,截图的图片必须经过压缩,时间大概提升300ms一张图片。大概70-100ms完成一张的截图

 // 显式调用
Bitmap screenshot = mUiAutomation.takeScreenshot();

// 压缩
screenshot = compress(screenshot);

/**
* 简单压缩一下图片
* */
Bitmap compress(Bitmap bitmap) {
System.out.println("source bitmap :" + bitmap.getByteCount());
if (bitmap != null)
{
bitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth() / 6, bitmap.getHeight() / 6, true);  //以6倍缩小
System.out.println("compress bitmap :" + bitmap.getByteCount());
return bitmap;
}
return bitmap;
}

 

图片对比:

//压缩后在读取图片像素点做对比
BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 2;//图片宽高都为原来的二分之一,即图片为原来的四分之一
        options.inPreferredConfig = Bitmap.Config.RGB_565;

//2条线程分别读取上下两半的图片,得出不相似的百分比
public void run() {
        for (int y = xx; y < yy; y++) {
            for (int x = 0; x < bitmap1.getWidth(); x++) {
                if (bitmap1.getPixel(x, y) != bitmap2.getPixel(x, y)) {
                    synchronized (this) {
                        ImageUtil.numDiffPixels++;
                    }
                }
            }
        }
        ImageUtil.countdownLatch.countDown();
    }

整体流程:

    ShellUtil.startApp(AppInfo.PACKAGE_BROWSER, AppInfo.ACTIVITY_BROWSER);  //1.启动被测应用
        takeScreen t = new takeScreen(api);  //2.实例化截图的线程类
        for (int a = 0; a < time; a++) {
            cachedThreadPool.execute(t);  //3.以100ms的间隔截图25张
            api.sleep(100);
        }
        api.sleep(2000);    //两秒收分析,收集结果
        String[] result = loadImage.compareOnBegin("/sdcard/"
                + AutoBase.REPORTPATH + "/" + AutoBase.REPORTPATH, yes);
String[] result 是一个数组,原因是图片读取是从开头到结尾,会读取两张图片相似度小于80%的图片,记录时间,用当前时间减去第一张的时间,等于启动速度。。
时间: 2024-10-11 23:10:37

从图片对比的角度看启动时间的相关文章

另一种角度看《RFID Advanced Security》首部曲

机缘巧合,有幸看到了不少关于RFID的资料,并且有幸看到了<RFID Advanced Security>这份PDF,听说这是国内安全大会上比较早出现关于RFID的议题.又听说这份是乌云内部的高级教程,文章内容单薄是无可厚非,毕竟是演讲,单单时间上来说不可能什么都讲.看完了以后实在有点不(fei)知(yi)所措(si),因为槽点实在是太多了. 文章分成4大块,分别为"RFID Basic Knowledge.RFID Basic System Security.RFID Multip

2018-03-28 从人机交互角度看中文编程:&#39;打开微信&#39;

前文通用型的中文编程语言探讨之一: 高考是基于现有英文编程语言的一个技术思路. 在这个回答以及下面的讨论中, 又提到了编程其实是人机交互的一种形式. 不禁试着跳出程序员视角看这个问题. 几年前才发现Mozilla的火狐浏览器早在2008年开始了一个叫Ubiquity的项目, 而且根据这里介绍, 它直到最近的火狐浏览器大改才失效. 官网介绍摘选: Its purpose was to explore whether a radically different type of interface t

从实践者的角度看软件架构的历史

无论什么东西,套用宋丹丹的话,就是都有它的过去.现在和将(jiǎng)来.因此学习一样东西,如果能多学一点它的历史,会让我们对其为何有如此现状少一些纠结,同时才有可能对其未来趋势有靠谱一点点的洞见.昨夜窗外雨声稀疏,难以入眠,突然想到软件架构的发展史是怎样的,于是今晨起来网上逛一圈,邂逅到这篇论文<The History of Software Architecture – In the Eye of the Practitioner>,因此,这是一篇译文. 小弟不才,没有能力自己去梳理这么庞

基于python+appium通过图片对比来做的UI自动化

1.python + appium +图片对比实现UI自动化:背景:当手机需要适配不同的语言时,测试过程中易出现因为语言不熟悉,导致UIbug被遗漏(例如setting中的描述性文字显示不完整等等问题)环境搭建:需使用模块PIL,Windows版本链接地址:http://pythonware.com/products/pil/ubuntu (使用16.04虚拟机):sudo apt-get install python-imaging安装过程遭遇Unable to acquire the dpk

从一个程序员的角度看——微信小应用

前言: 最近初步了解了一下微信小应用,APP端的同事也非常感兴趣,于是在公司内部做了一个小小的分享,分享的过程中有很多讨论内容,大家也是非常感兴趣和有自己的看法,当时"混乱"的场面好几次我都没有把持住.以下内容部分来自于内部分享所用ppt.文章对微信小应用的使用做了展示性介绍,并简单介绍了代码结构.后端交互方法.最后提出一些总结和疑问.文章内容比较主观,有不对的地方欢迎大家指出纠正. 前段时间微信小应用公开内测,在朋友圈火了一把,各种阐述疯狂蔓延,干掉APP之类的说法比较突出,确实达到

从JVM的角度看JAVA代码--代码优化

从JVM的角度看JAVA代码–代码优化 从JVM的角度看JAVA代码代码优化 片段一反复计算 片段二反复比較 在JVM载入优化为class文件,运行class文件时,会有JIT(Just-In-Time)的介入,它会做进一步优化,这样就须要考虑是否可能被JIT优化. 片段一:反复计算 // 反复计算,这里b()被计算两次 Object a = b() == null ? "" : b(); // 优化代码 Object c = b(); Object a = c == null ? &

INDEX--从数据存放的角度看索引2

在上次<INDEX--从数据存放的角度看索引>中,我们说到"唯一非聚集索引"和“非唯一非聚集索引”在存储上有一个明显的差别:唯一非聚集索引的非叶子节点上不会包含RID的数据,让我们继续来深挖一下. 准备测试数据: CREATE TABLE TB1 ( C1 INT, C2 INT, C3 INT ) GO CREATE UNIQUE CLUSTERED INDEX IDX_C1 ON TB1(C1) GO CREATE UNIQUE INDEX IDX_C2 ON TB1(

从一个程序员的角度看——微信小应用(第二弹 见解)

最近公司的小程序刚通过了代码审核(待发布状态),从最初对它的学习 到开发 到小程序待发布 再到28日微信公开课,也算一步步的了解了微信小程序吧. 28日微信pro公开课张小龙针对小程序进行了一些答疑,之后行业的同僚都很关注,似乎大家还是有很多疑惑.之前初学后写过博客 从一个程序员的角度看--微信小应用(第一弹 初学),今天决定再写一篇小程序的小文,所以此篇谈谈我对小程序的理解吧. 说说张小龙回答的8个问题 1.小程序的入口在哪里?张小龙给出的答案是:小程序在微信没有入口. 2.小程序会不会有类似

从节能角度看数据中心软硬件设计(一)

从节能角度看数据中心软硬件设计(一) -PMC公司资深顾问.前Facebook存储架构设计师. OCP创始人之一Per Brasher于CCCC演讲实录- 此次演讲流程如下.首先讨论关注数据中心效率的原因及其提升效率的原始动力所在.第二步讨论影响效率的主要构成部件,这些部件对效率的贡献大概有多少,以及怎样对每个部件的效率进行优化和提高.第三个方面是展望如何进一步降低TCO成本,其中将涉及更先进的数据保护机制.接着会对存储的各种新模式进行一定展望,最后做一个总结. 下表总结了OCP的设计理念,其中