【MIG专项测试组】如何准确评测Android应用的流畅度?

【毕业设计参考】基于yolov8+pyqt5自适应界面设计的锂电池表面缺陷检测系统 基于YOLOv8+PyQt5的锂电池表面缺陷检测系统结合了先进的目标检测技术与友好的用户界面设计,为锂电池质量检测提供了一种高效、准确的解决方案。未来,随着深度学习技术的不断发展,我们可以进一步优化模型,提高检测精度和速度,同时拓展系统功能,如实现实时视频流检测、与生产系统的深度集成等,为锂电池产业的发展注入新的活力。希望本文对大家在相关领域的研究和实践有所帮助,欢迎大家在评论区交流讨论。 阅读详情


叶方正,2008年加入腾讯,就职于无线研发部【专项测试组】。曾经负责多个产品的性能优化工作,积累大量的移动终端平台优化以及评测经验。


怎样获取SM值?

前文我们分析了通过测量应用的帧率FPS并不能准确评价App的流畅度(如何量化Android应用的“卡”?流畅度原理&定义篇),FPS较低并不能代表当前App在UI上界面不流畅,而1s内VSync这个Loop运行了多少次更加能说明当前App的流畅程度。

那么我们可以直接在App代码中通过Choreographer的回调FrameCallback来计算Loop被运行了几次,从而知道应用的流畅度。但在实际情况下我们不一定能修改代码(实际发布的版本不允许加入测试代码)或者根本拿不到代码(譬如和竞品进行对比)。

今天我们介绍一种更简单直观测量Android应用流畅度的方法,就是通过开源测试工具GT(http://gt.qq.com)。

1、先启动要测试的应用。

2、启动GT,在插件中选择GT Injector,再选择被测进程,点击“射它”。


3、点击后,Para界面会出现流畅度指标以及被插入程序的CPU占有率,并且会带上被插入的进程名。将流畅度后面小方框勾选(表示需要记录SM值到log文件),然后点击右个角“Gather & Warning”下小红圈(表示开始记录数值)。


4、启动App,开始做相关的测试。

5、完成测试后,在GT界面点击流畅度(SM),则会出现已经记录的SM值图表,点击右上角磁盘图标,保存log到指定名字的文件夹。


6、最后利用工具(比如应用宝),把log导入到PC端进行后期处理(一般情况下,文件保存路径在:SD卡/GT/GW/进程名/自定义文件夹)。


温馨提醒:以上的操作因为涉及到进程注入需要手机Root权限,如有问题,可以加GT交流群咨询(QQ群号:145535035)。

SM测试效果如何?

我们已经收集了SM的测试数据,但测试数据是否准确?我们拿一些浏览器产品为例子,来评测下SM的数据和人的感受是否对应得上。

首先,我们为了把感官和人的感受对应上,特把主动感官分数对应到以下几种描述。

流畅度主观评分 描述
4~5 界面滑动流畅
并且能够快速响应用户输入(各种操作)
3~4 界面滑动顿挫感
并且能够及时响应用户输入(各种操作)
2~3 界面滑动明显顿挫感
响应用户输入(各种操作)有种慢半拍的感觉
1~2 界面滑动明显画面跳跃感
响应用户输入(各种操作)有严重的延迟
0~1 不能动了


1、先看看流畅度(SM)和丢帧(SF)之间的关系

测试场景:浏览器看妹子图

评测手机:Nexus 4

流畅度主观评分(总体):2.5(界面滑动明显顿挫感,响应用户输入有种慢半拍的感觉)


因为丢帧是个不连续的过程,所以图中的丢帧都是以点来表示其离散的状态。从上面图表可以看出:

  • 丢帧(SF)越多,流畅度(SM)越低。

  • 26:16~26:42之间的流畅度很低,并且丢帧最密集。

再整体梳理一下这期间流畅度、丢帧和主观评分的数据:

主观评分

流畅度均值

丢帧均值

2.50

25.26

34.15

从这个数据可以看到,丢帧(SF)越多流畅度(SM)越低,并且主观感觉比较卡,这个关系是成立的。


2、再引入FPS看看三者关系

测试场景:浏览器看妹子图

评测手机:Nexus 4

流畅度主观评分(总体):2.5


这次测试引入了FPS数据,从图表中可以看出:

  • FPS曲线和SM曲线差不多,而且同样受丢帧的影响。

  • 有段比较奇怪的地方:流畅度很高,但FPS比较低,无丢帧情况,将这段数据放大来看:


检查这个时段的测试场景:静置在某个界面没有动,主观评分在4.5左右。

再整体梳理一下这个时间段FPS、流畅度、丢帧和主观的数据:

主观分

流畅度均值

丢帧均值

FPS均值

4.5

58.375

0.5

16.333

可以看出,流畅度SM会比FPS更加适合客观描述App卡的程度。

如何有效利用SM值判断App流畅度?

确定了使用SM值来评估手机App的流畅度后,我们会开始进行一个产品在不同场景,以及多个产品间在相同场景下的测试对比。场景太多,测试数据巨大,该如何有效使用SM测试结果去判断App流畅情况?


1、一些思路

  • 不能直接用平均值和方差

根据以往经验,通过平均值,方差等一些指标,并不好说明问题。如果卡顿时间出现较短,测试时间较长,则平均值和方差这种指标不容易发现问题,但是又确实有卡顿。平均值和方差适合描述服从正态分布的随机变量,但是测试得到的SM值并不是这样的随机变量。

  • 将测试结果按卡顿和流畅分段,对每个卡顿区间段打分

之前参考了一篇游戏流畅度评分的文章,该文章结合FPS平均值和卡顿的程度以及频率,对游戏整体流畅度打分。但是普通App和游戏的区别比较大。对普通App来说,用户不是一直在操作,而且不同的操作差异也较大,因此卡顿的频率一般较低,用平均值和卡顿的频率打分得到的结果可能会偏高。所以把测试过程按照卡顿和流畅分段,计算每个卡顿区间的打分和持续时间可能更有参考意义。

  • 总体打分时加大卡顿时的权重,降低流畅区间的权重

虽然我们重点关注的可能是卡顿的地方,但是竞品测试,以及两个版本对比需要有总体评判结果,不能只看局部。为了加大结果的区分度,对卡顿区间增加权重,对流畅区间降低权重,来突出卡顿对整体评分的影响。因此,评估结果将包括两部分:总体打分,以及卡顿区间、流畅区间的持续时间和打分。


2、流畅度评估方法

  • 预处理,每5个(秒)一组,取最低值。如果5秒内出现多于一次卡顿(SM低于40),则再乘以一个和卡顿次数有关的权值(小于1)。

【说明】如果卡顿出现次数较少,平均值和方差不容易发现问题。因此没有直接对数据评估,先进行了预处理,突出SM值低的部分,加大卡顿对总分的影响。

处理前的三组数据:


处理后的三组数据:


  • 将处理后的数据按卡顿和流畅分段,针对每段打分。

【说明】如果只有最后总分,且流畅的时间较长,卡顿的数据容易被流畅的数据淹没。而且有些测试场景存在一段流畅,一段卡顿的现象,卡顿并不一定在整个测试过程中存在。这样分开流畅和卡顿的区间处理,更容易看出卡顿的程度。

  • 根据测试经验,对SM值对应的卡顿严重程度打分。

【说明】根据测试同学的经验,流畅度指标SM低于40时,用户能感知到卡顿,SM在20以下卡顿比较严重。因此在打分时,SM值在20以下时打分最低,对应0-20,在20-30区间打分低,对应20-60,30-40区间打分较低,对应60-70,40以上打分在70以上。

  • 总体打分时降低流畅区间的权重。

【说明】这样处理的原因和第一项的原因一样,我们更关注的是卡顿,流畅区间过长时会淹没卡顿的数据。


3、对比几个浏览器产品在同一个场景下的测试数据

测试场景:浏览网页

评测手机:Nexus 4

测试方法:打开凤凰网,来回上下滑动,在滑动的过程中记录流畅度数据


流畅度评估后数据:



从上面的数据可以看出,在滑动浏览网页时,C浏览器略微好于A浏览器和B浏览器。

当然这都是在性能比较好的手机(Nexus 4)上测试,其实主观感受差距不大,但从量化数据上就可以看出优略。


小编有话说

卡顿的问题严重性,可能不像崩溃来得那么强烈,但对于用户的流失影响是潜移默化,慢慢深入。若想知道自己产品流畅度如何,也可以试试用SM来评测自己产品性能。


本文系腾讯Bugly特邀文章,转载请注明作者和出处“腾讯Bugly(http://bugly.qq.com)”

从RADIUS服务器到AP:实战搭建一个小型WPA2-Enterprise测试环境(FreeRADIUS + 家用路由器) 本文详细介绍了如何从零搭建WPA2-Enterprise测试环境,使用FreeRADIUS服务器和家用路由器实现企业级WiFi认证。通过实战指南,包括证书生成、EAP-PEAP配置、OpenWrt路由器设置及故障排查,帮助网络工程师和爱好者掌握802.1X协议栈的实际应用。 阅读详情

相关推荐

Information Fusion投稿避坑指南:从初稿到返修的完整流程解析(附模板下载)

本文详细解析了向Information Fusion投稿的全流程,从初稿准备到返修策略,涵盖了22个关键细节。特别强调了投稿前的隐形门槛、LaTeX模板的字体陷阱、图表规范要求以及返修回复的进阶技巧,帮助研究者避免常见错误,提升稿件接受率。附有实用模板下载,助力学术写作效率提升。

tgb34567890的博客 1420

【腾讯Bugly移动开发者沙龙回顾】腾讯专家精彩分享:Android应用性能优化实践

5月31日,由腾讯的无线研发部主办的腾讯Bugly移动开发者沙龙第一期在北京市中关村创业街的车库咖啡拉开序幕。 腾讯移动开发者沙龙是腾讯为广大移动开发者搭建的分享平台,邀请行业内的开发大咖与大家进行面对面的交流,以实例和模型全面系统地介绍先进开发技术的运用,优质资源与工具的使用等热点话题。 主持人进行开场与活动介绍 本期沙龙的主题为“移动应用性能优化笔记”,邀请了腾讯移动

腾讯Bugly的专栏 2490

信号处理领域的研究生看过来:手把手教你搞定ICASSP 2025论文投稿(附Latex模板与格式检查清单)

本文为信号处理领域研究生提供ICASSP 2025论文投稿的详细指南,涵盖Latex模板使用、格式检查清单及投稿流程。特别针对IEEE旗舰会议的严格要求和2025年可能出现的新变化,提供预判性建议和实战技巧,帮助作者高效完成论文投稿。

程涛 561

Android优化笔记

摘要:Android应用优化主要集中在内存和UI流畅度上,从内存占用与泄露、UI流畅度的帧数和响应时间到IO的阻塞式响应时间等,腾讯移动性能评测专家叶方正在本文中结合实战经验全方位剖析Android应用性能评测与调优。 什么样的应用才能称得上是优雅的App?这是腾讯内部一直在思考的问题,优雅的App就是把简单的事情做到极致,必须对终端应用性能进行打磨。在Android应用优化方面,主要包

u010474556的专栏 380

氮化镓GaN电机驱动实战:从器件原理到EPC驱动中心

电机驱动是工业自动化和电动交通的核心,功率器件的选择直接决定系统效率与可靠性。传统硅基IGBT和MOSFET在开关速度、损耗方面存在瓶颈,而氮化镓(GaN)作为宽禁带半导体,凭借高电子迁移率、低栅极电荷和近乎为零的反向恢复电荷,正成为电机驱动领域的热门选择。EPC建立电机驱动中心,提供完整的评估平台,覆盖从低压家电到中压伺服的应用场景。文章从GaN器件原理出发,对比传统硅器件,详解三相BLDC/PMSM驱动系统的搭建、栅极驱动与Layout设计、死区时间设置及参数计算实例,并分享测试中遇到的振铃、EMI等高

weixin_29168675的博客 322

YOLOv5 改进点总览:轻量化、高精度的背后有哪些魔改?

YOLOv5是由Ultralytics团队开发的高效目标检测模型,其核心改进包括:主干网络采用CSPDarknet53提升梯度传播效率;特征融合使用PANet增强小目标识别;输出结构采用解耦头设计优化定位和分类任务。此外,YOLOv5通过CIoU损失函数、Mosaic数据增强和SimOTA标签分配机制进一步提升性能。模型支持多种推理格式(ONNX/TensorRT等),并具备自动锚框匹配和多尺度训练功能,使其在轻量化(yolov5s仅7MB)与高性能(最高51.2% mAP)间取得平衡,但缺乏正式论文支撑是

guoguozgw的博客 1805

Android的内存优化

腾讯公司在五月三十一日开展【腾讯Bugly移动开发者沙龙】大会,大会上面叶方正老师讲解了 关于Android的内存优化的问题,不过我感觉叶老师更多的站在了测试的角度上去解释了这一方面,叶老师给我们介绍了很多的工具去测试Android应用在各种情况下的内存占用情况,不过好像对我们开发的帮助并不是特别的大。我在这里总结叶老师所说的重点和自己对内存优化的一些理解,希望能够对大家有所帮助。Android应用

LGD_Sunday的专栏 1399

《30天入门 SAP BTP 开发》教程的目录和使用说明,建议收藏

本教程分为两部分:第一部分为SAP BTP入门系列,包含从基础概念到操作步骤的系统性学习内容,建议零基础用户按顺序学习;第二部分为专题文章集合,涵盖SAP BTP的多个技术点,适合已有基础的用户按需查阅。教程包含账号申请、Global Account操作、Java应用开发、AI工具使用等丰富内容,同时解答常见问题并提供实战案例。所有文章均附带详细链接,便于读者系统学习或针对性查阅。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4383

Android终端系统APP应用性能测试之响应速度&流畅度

Android性能测试的基础,给大家介绍下测试思路! 响应速度: 是指终端中的APP/应用的启动时间(包含冷启动和热启动,补充概念:”冷启动”:是指APP/应用第一次开启;”热启动”:是指APP/应用第二次以后开启;); 这里的启动方式有两种:1.人工手动点击打开;2.通过命令启动该应用;(这两者启动肯定是有误差的,实际上在手机面向客户,所以经常采用人工启动应用开始计时) 测试方法...

测试领域专家,多领域测试技术、管理、工具都略懂,略懂一二 8882

PCL 基于法线微分(DoN)的点云分割【2026最新版】

基于法线微分的分割。博客长期更新,本文最新更新时间为:2026年5月10日。

点云侠的博客 39万+

42页Claude 3技术报告解读(Opus, Sonnet, Haiku)

在Claude 3模型中,增加了一个额外的原则到Claude的宪法中,以鼓励尊重残疾人权利,这一原则源自对集体宪法AI的研究。Claude 3模型的训练基于专有的混合数据集,包括截至2023年8月互联网上公开可用的信息,以及第三方提供的非公开数据、数据标注服务和付费承包商提供的数据,还有内部生成的数据。这些初始响应通常包含有害和有毒的内容。Claude 3模型家族在推理、编码和问答任务上展现出卓越的性能,特别是在行业标准基准测试中取得了显著的提升,证明了其在处理复杂问题和提供准确答案方面的能力。

具身机器人和通用AI 2432

事件分发机制详解(上)

一、谷歌官方对流畅度的解释: Android流畅运行,需要运行60帧/秒, 则需要每帧的处理时间不超过16ms。 二、IOS系统比ANDROID系统流畅的原因 因为Android系统UI的框架设计的问题。 在iOS中UI渲染过程具有绝对的优先等级,当用户接触到iPhone的触摸屏后,iOS中所有的进程都将停止,系统会将所有资源用于渲染UI过程。而在Andro

听海的博客 6374

DRV8711驱动器的各寄存器的介绍

drv8711驱动器

PCLintelligence的博客 1634

【MIG专项测试组】如何量化Android应用的“卡”?—流畅度原理&定义篇

腾讯Bugly特邀鹅厂MIG专项测试组,分享移动应用质量的有效评估方法。 MIG专项测试组 致力于为腾讯移动互联网事业群(MIG)提供专项评测及深度优化(性能、功能、安全等);同时负责探索新的测试理论和方法,研发评测工具及基础组件。 背景 在手机App竞争越来越激烈的今天,Android App的各项性能,如CPU、内存消耗等都有了客观的衡量指标。但对于

先疯盗骨 920

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【开发者沙龙 干货分享】Android App性能评测与调优-内存与流畅度

转载地址:http://bugly.qq.com/blog/?p=249 【开发者沙龙 干货分享】最合适的构架,最合适的重构 转载地址:http://bugly.qq.com/blog/?p=215 【MIG专项测试组】如何准确评测Android应用的流畅度? 转载地址:http://bugly.qq.com/blog/?p=330

470

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Android App性能评测分析-流畅度篇

1.前言在手机App竞争越来越激烈的今天,Android App的各项性能特别是流畅度不如IOS,安卓基于java虚拟机运行,触控响应的延迟和卡顿比IOS系统严重得多。一些下拉上滑、双指缩放快速打字等操作,安卓的流畅度都表现比较糟糕,但是,对于App使用过程是否流畅,一直没有一个可靠的指标将用户的客观感受和数据一一对应。虽然之前有FPS(每秒帧数)作为游戏或视频类App的性能指标,但对于那些界面更...

adyw2565876的博客 8380

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android应用优化之流畅度实操

上一篇流畅度概念向大家详细地描述了VSync机制和Choreographer编舞者的用法。可能所讲解的内容偏向理论概念,因此这篇是流畅度优化实操,整篇主要分三层,UI层、代码逻辑层、IO层来讲述各个优化点,其中还会穿插多个辅助检测插件。可谓干货满满,希望对大家有用。 最基本的UI层显示优化 调试GPU过度渲染 在App出现卡顿的时候,我们第一时间会想到我们的App是不是存在过度绘制的问题。为什...

weixin_34198453的博客 372

android 手机怎么测试,如何测试Android手机的流畅性?

对于安卓手机,我们听到最多的抱怨就是不流畅,在选购前,问的最多的问题也是这款手机流畅不流畅。有的人看配置,但是同样配置的手机,流畅性天差地别,而有些低配手机反而很流畅;有的人看跑分,但是有些手机跑分很高,流畅性却很差;更糟的是,因为人和人的流畅标准不同,同样的手机,张三觉得不流畅,李四觉得还不错,选购前问别人也无法有个正确的参考。那么到底应该看什么呢?我们来做个解读。一、什么是手机的流畅性所谓手机...

weixin_31156651的博客 1410

Android流畅度测试

http://www.cnblogs.com/summer-sun/p/5524663.html http://www.cnblogs.com/summer-sun/p/5524663.html http://www.cnblogs.com/summer-sun/p/5524663.html Android流畅度测试 测试方法一:系统自带-开发者模式

u011904605的博客 974

Android性能优化第(十 一)篇---卡顿分析,正确评测流畅度

一、FPS评测应用流畅度不准确说到应用的流畅度,都会想到FPS,系统获取FPS的原理是:手机屏幕显示的内容是通过Android系统的SurfaceFLinger类,把当前系统里所有进程需要显示的信息合成一帧,然后提交到屏幕上进行显示,FPS就是1秒内SurfaceFLinger提交到屏幕的帧数。用FPS来评测一个应用是否真的卡顿存在两个问题。 - 有的时候FPS很低,APP看起来却很流畅;

Looper景 8813

Android 界面滑动卡顿分析与解决方案(入门)

Android 界面滑动卡顿分析与解决方案(入门) 导致Android界面滑动卡顿主要有两个原因: 1.UI线程(main)有耗时操作 2.视图渲染时间过长,导致卡顿 目前只讲第1点,第二点相对比较复杂待以后慢慢研究。 众所周知,界面的流畅度主要依赖FPS这个值,这个值是通过(1s/渲染1帧所花费的时间)计算所得,FPS值越大视频越流畅,所以就需要渲染1帧的时间能尽量缩短。正常流畅度的FPS值在6...

weixin_30256901的博客 1390

【MIG专项测试组】如何量化Android应用的“卡”?---流畅度原理&定义篇

MIG专项测试组 致力于为腾讯移动互联网事业群(MIG)提供专项评测及深度优化(性能、功能、安全等);同时负责探索新的测试理论和方法,研发评测工具及基础组件。 背景 在手机App竞争越来越激烈的今天,Android App的各项性能,如CPU、内存消耗等都有了客观的衡量指标。但对于App使用过程是否流畅,一直没有一个可靠的指标将用户的客观感受和数据一一对应。虽然之前有FPS(每秒帧数

腾讯Bugly的专栏 3451

软件性能工程(4)-应用程序界面流畅度的量化方法与应用

指标与现实不匹配应用流畅度是我们最关心的性能优化指标之一,本文主要介绍流畅度指标的理解与实际应用. 流畅度评判的难度在于量化指标并不能完全对应到感官体验上。这什么意思呢?举个简单例子;假...

Gracker的专栏 1383

如何监测Android应用卡顿?这篇就够了

本文首发于微信公众号「Android开发之旅」,欢迎关注 卡顿介绍 用户在使用我们应用的时候,很多问题是很难被及时的发现的比如内存占用高,耗费流量等,但是一旦发生卡顿就会被用户直观的感受到。所以应用卡顿是很影响用户体验的。另外一方面,对于开发者来说,卡顿的问题很难定位,发生问题的原因错综复杂,比如:代码问题、内存问题、绘制问题以及IO操作等等。而且线上发生的卡顿问题在线下我们很难复现,因为这和...

Android开发之旅 3566

短视频测试——腾讯大牛分享短视频测试经验

周末听的一场 腾讯大牛分享 短视频的测试经验。有些内容都不记得了。 短视频最主要的功能就是两个 拍摄视频和播放视频 拍摄视频 拍摄清晰度测试 卡顿测试 草稿测试 时间精准测试 播放视频 播放秒开测试 卡顿测试 清晰度测试 音画同步测试 播放秒开测试 播放器测试 解码性能,软解硬解 预加载、IP直出等策略测试 预加载时机、不同网络下的预加载 竞品对比测试 ...

凌晨的博客 1万+
上一篇: 如何定位Obj-C野指针随机Crash(二):让非必现Crash变成必现
下一篇: 【腾讯bugly干货分享】如何定位Obj-C野指针随机Crash(三):加点黑科技让Crash自报家门
腾讯Bugly
博客等级 码龄12年 1875粉丝 201原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值