android性能优化(1)—性能评测剖析

本文介绍了在Android平台中评估应用性能的方法,包括使用不同API进行时间测量、通过Debug.startMethodTracing进行方法调用跟踪以及利用日志进行调试。

一、时间测量

1.java和android提供了以下API来测量时间及性能

System.currentTimeMills

System.nanoTime

Debug.threadCpuTimeNanos

SystemClock.currentThreadTimeMills

SystemClock.elapsedRealTime

SystemClock.upTimeMills


2.测量


为何不使用System.currentTimeMills

a.其精度不够

b.更改系统时间会影响结果


3.System.nanoTime()


运行结果


4.Debug.threadCpuTimeNanos

该方法为android sdk自带,只会测量在当前线程中所花费的时间,如果要在多线程上进行测量,则必须在所有涉及线程的地方调用此方法并把结果加上


运行结果:


可以看到虽说暂停了1s,使其他线程获得调度机会,但是由于Debug.threadCpuTimeNanos只计算当前线程的运行时间,所以结果小于1s

如果我们现在在System.nanoTime的代码中改为如下所示:


运行结果:


可一看到时间大于1s,也就是说System.nanoTime会测量所有线程的运行时间


二、方法调用跟踪

1.Debug.startMethodTracing


上图是android中关于此方法的四个变种

2.demo


a.Debug.startMethodTracing(sdcardPath + "/shadow.trace");会在sdcard目录下生成一个trace文件


b.接着把该文件pull到桌面上

3.使用traceview文件

a.在命令行中输入如下命令


这时将会显示出如下图形界面


下面介绍以下几个选项:

Name:方法名

Incl%:此方法中占的时间百分比(包含子方法)

Inclusive:此方法所花费毫秒数

Excl%:此方法所占百分比(不包含子方法)

Exclusive:此方法所花费毫秒数(不包含子方法)

Calls+RecurCalls/Total:调用和递归调用次数

Time/Call:平均每次调用时间

下面我们来看看测试的方法结果:



可一看到Thread.sleep方法调用了3次,耗时3037.642ms,Thread.sleep又调用了TimeUnit.seconds.toMills和TimeUnit.seconds.excessNano,分别花费0.249和0.071ms,而我们的测试方法则共花费了3038.315ms

Parents:测试方法的调用者

Children:测试方法的调用方法

b.在DDMS中使用traceview

打开ddms视图,连续点击图中红框处两次(第一次表示start,第二次表示stop)


这是会在Eclipse中出现如下traceview视图


使用方法和命令行差不多


三、使用日志调试

android提供了以下日志级别


优先级:

Debug>Info>Warning>Error>Assert


好了,这就是今天要讲的在android中一些性能评估的方法和工具

源码来自:https://pan.quark.cn/s/a3a3fbe70177 AppBrowser(Application属性查看器,不需要越狱! ! ! ) 不需要越狱,调用私有方法 --- 获取完整的已安装应用列表、打开和删除应用操作、应用运行时相关信息的查看。 支持iOS10.X 注意 目前AppBrowser不支持iOS11应用查看, 由于iOS11目前还处在Beta版, 系统API还没有稳定下来。 等到Private Header更新了iOS11版本,我也会进行更新。 功能 [x] 已安装的应用列表 [x] 应用的详情界面 (打开应用,删除应用,应用的相关信息展示) [x] 应用运行时信息展示(LSApplicationProxy) [ ] 定制喜欢的字段,展示在应用详情界面 介绍 所有已安装应用列表(应用icon+应用名) 为了提供思路,这里只用伪代码,具体的私有代码调用请查看: 获取应用实例: 获取应用名和应用的icon: 应用列表界面展示: 应用列表 应用运行时详情 打开应用: 卸载应用: 获取info.plist文件: 应用运行时详情界面展示: 应用运行时详情 右上角,从左往右第一个按钮用来打开应用;第二个按钮用来卸载这个应用 INFO按钮用来解析并显示出对应的LSApplicationProxy类 树形展示LSApplicationProxy类 通过算法,将LSApplicationProxy类,转换成了字典。 转换规则是:属性名为key,属性值为value,如果value是一个可解析的类(除了NSString,NSNumber...等等)或者是个数组或字典,则继续递归解析。 并且会找到superClass的属性并解析,superClass如...
基于遗传算法辅助异构改进的动态多群粒子群优化算法(GA-HIDMSPSO)的LSTM分类预测研究(Matlab代码实现)内容概要:本文研究了一种基于遗传算法辅助异构改进的动态多群粒子群优化算法(GA-HIDMSPSO),并将其应用于LSTM神经网络的分类预测中,通过Matlab代码实现。该方法结合遗传算法的全局搜索能力与改进的多群粒子群算法的局部优化特性,提升LSTM模型在分类任务中的性能表现,尤其适用于复杂非线性系统的预测问题。文中详细阐述了算法的设计思路、优化机制及在LSTM参数优化中的具体应用,并提供了可复现的Matlab代码,属于SCI级别研究成果的复现与拓展。; 适合人群:具备一定机器学习和优化算法基础,熟悉Matlab编程,从事智能算法、时间序列预测或分类模型研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①提升LSTM在分类任务中的准确性与收敛速度;②研究混合智能优化算法(如GA与PSO结合)在神经网络超参数优化中的应用;③实现高精度分类预测模型,适用于电力系统故障诊断、电池健康状态识别等领域; 阅读建议:建议读者结合Matlab代码逐步调试运行,理解GA-HIDMSPSO算法的实现细节,重点关注种群划分、异构策略设计及与LSTM的集成方式,同时可扩展至其他深度学习模型的参数优化任务中进行对比实验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值