启动时间

一、应用的启动方式

  通常来说,启动方式分为两种:冷启动和热启动。

  1、冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。

  2、热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。

  特点

  1、冷启动:冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。

  2、热启动:热启动因为会从已有的进程中来启动,所以热启动就不会走Application这步了,而是直接走MainActivity(包括一系列的测量、布局、绘制),所以热启动的过程只需要创建和初始化一个MainActivity就行了,而不必创建和初始化Application,

  因为一个应用从新进程的创建到进程的销毁,Application只会初始化一次。

二、测试方式

      启动APP命令     adb shell am start -W -n package/activity(冷启动、热启动都用这个)

停止APP命令     adb shell am force-stop package:冷启动,sdb shell input keyevent 3(手机上的back键):热启动

获取手机里面打开应用的包名、actiivty名字      adb logcat | grep START  (git base下使用)

三、自动化脚本的实现

      两种实现思路:

1、获取命令执行时间,作为启动时间参考值

2、在命令执行前后加上时间戳,以差值作为参考值

类设计:

App class:LaunchApp、StopApp、GetLaunchTime

Controller class : run、collectAllData、SaveToDataCSV

#/usr/bin/python
#encoding:utf-8
import csv
import os

#app控制类
import time

class App():
    def __init__(self):   #初始化
        self.content = ""
        self.startTime = 0

    #启动app
    def launchApp(self):
       cmd = ‘adb shell am start -W -n com.aoshang.exception/.SplashActivity‘
       self.content = os.popen(cmd)    #执行命令
    #停止app
    def stopApp(self):
        cmd = ‘adb shell am force-stop com.aoshang.exception‘
        os.popen(cmd)
    #得到启动时间
    def getLaunchTime(self):
        for line in self.content.readlines():
            if "ThisTime" in line:
                self.startTime = line.split(":")[1]
                break
        return self.startTime

#控制过程
class Controller(object):
    def __init__(self,count):
        self.app = App()
        self.count = count
        self.allData = [("timestamp","elapsedtime")]

    #单次测试过程
    def testProcess(self):
        self.app.launchApp()
        time.sleep(5)
        elapsedtime = self.app.getLaunchTime()
        self.app.stopApp()
        time.sleep(3)
        currentTime = self.getCurrentTime()
        self.allData.append((currentTime,elapsedtime))      #保存数据到元组中

    def run(self):
         while self.count > 0:
             self.testProcess()
             self.count = self.count - 1

    #获取当前的时间戳
    def getCurrentTime(self):
        currentTime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
        return currentTime

    def saveDataToCSV(self):
        csvFile = file("startTime1.csv","wb")
        writer = csv.writer(csvFile)
        writer.writerows(self.allData)
        csvFile.close()
#运行方法
if __name__ == "__main__":
        controll = Controller(10);
        controll.run()
        controll.saveDataToCSV()

启动时间判断方式:

取竞品去比较参考

各版本之间对比

参考博客:

http://www.cnblogs.com/xunzhi/p/5794793.html

时间: 2024-12-24 10:31:06

启动时间的相关文章

APP性能测试(启动时间)

#encoding:utf-8 import csv import os import time class App(object): def __init__(self): self.content = "" self.startTime = 0 #启动App def LaunchApp(self): cmd = 'adb shell am start -W -n com.android.browser/.BrowserActivity' self.content=os.popen(

Android内核开发:如何统计系统的启动时间

本文是<Android内核开发>系列的第七篇文章,通过上一篇文章<Android内核开发:图解Android系统的启动过程>我们大致了解了Android系统的启动过程,那么本文就从实践的角度,简单介绍一下如何统计Android系统的启动时间. 这里所说的统计系统的启动时间,并不是简单地用秒表和肉眼来统计,而是通过分析系统输出的log信息来统计,这样才显得更加专业. 首先了解2个概念: (1) Android是基于Linux内核的系统,因此Android的启动过程是分为两个阶段的,第

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

目前测启动时间用得较多的方法: 1.am start -W  只获取activity的启动时间 -W:等目标Activity启动后才返回 -n:用于设置Intent的Component 2.高速相机  以真实的用户体验去获取应用的启动时间 第一种可能得不到我们想要的. 第二种过于依赖硬件设备 冷启动:这时候你的应用程序的进程是没有创建的. 这也是大部分应用的使用场景.用户在桌面上点击你应用的 icon 之后,首先要创建进程,然后才启动 MainActivity.用户在桌面上点击这个 Activi

android启动时间慢的问题

[转]对于Android的性能这方面评估,大部分都是有超级兔子去比跑分的,还是不能反映全面的问题.就我知道的而言,应用启动时间是很影响用户体验的一个性能方面问题. 最近的一个项目,别人都说应用启动慢,我师傅看我没什么事,叫我看一下.以前也看过一次,但那次是当学习,只是看看整流程是怎么走的,这次确不一样了.开始的一天,按以前的方式再看了一下,感觉没有什么异常的地方,不过时间确实比对比机慢了很多,但不知道是时间是发哪块了.从InputReader到ViewRootImpl,从ViewRootImpl

Eclipse简单插件开发-启动时间提示

1.新建Plug-in Project 不用改其他选项,直接点击“Next”,然后点击“Finish” 2.新建ShowTime.java package com.developer.showtime; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.

Android计算app启动时间之二

采用一中的方法计算启动时间,输入adb shell am start -W apk/apk.MainActivity 会报没有权限的错误,google了下,要修改某些东西,懒的改了. 现在来讲下第二种方法,我们可以直接查看日志:如图: 当然有的app首次安装启动会停在引导页,有的app未登录会停在登录界面,这些也可以通过日志查看启动时间.

优化 App 的启动时间

这是一篇 WWDC 2016 Session 406 的学习笔记,从原理到实践讲述了如何优化 App 的启动时间. App 运行理论 main() 执行前发生的事 Mach-O 格式 虚拟内存基础 Mach-O 二进制的加载 理论速成 Mach-O 术语 Mach-O 是针对不同运行时可执行文件的文件类型. 文件类型: Executable: 应用的主要二进制 Dylib: 动态链接库(又称 DSO 或 DLL) Bundle: 不能被链接的 Dylib,只能在运行时使用 dlopen() 加载

修改cron.daily的启动时间

要修改这个文件/etc/sysconfig/cron,要修改的内容如下: ## Type: string ## Default: "" # # At which time cron.daily should start. Default is 15 minutes after booting # the system. Example setting would be "14:00". # Due to the fact that cron script runs

利用 Traceview 精准定位启动时间测试的异常方法 (工具开源)

机智的防爬虫标识原创博客地址:http://www.cnblogs.com/alexkn/p/7095855.html博客求关注: http://www.cnblogs.com/alexkn 1.启动时间测试常用方案介绍 如何精确测试启动时间,其实这个问题可大可小,主要需要看团队对启动时间的测试精度要求,当启动时间测试误差需要精确到小几十毫秒时,很多问题都会暴露,因为其实目前很难有一种方式去评估数据的有效性.当前设备状态,CPU温度,内存,系统GC,研发人员的代码以及线程模式等,都有可能导致启动