安卓性能调优之-检测应用启动速度

APP性能测试(启动速度、内存、CPU、FPS、GPU、耗电量) 文章目录启动速度内存CPUFPS(应用的使用流畅度)GPU渲染耗电量 启动速度 测试内容 冷启动速度 热启动速度 完全启动速度 有网启动速度 无网启动速度 主要测试冷启动和热启动 测试标准 测试标准:冷启动时间不超过1.5s, 热启动不超过1s 测试方法 方法1:通过FFmpeg录屏拆帧 https://ffmpeg.zeranoe.com/builds/官网 https://w... 阅读详情

先来了解一下几种应用启动的概念:

冷启动(Cold Start):应用完全未启动,模拟全新启动过程。
暖启动(Warm Start):进程仍然存活,但 Activity可能需要重新创建。
热启动(Hot Start):进程存活,Activity只是从 onStop 恢复到 onResume

adb命令检测

adb shell am start -W com.example.quickdev/com.example.quickdev.ui.activity.SplashActivity

或者使用:

adb shell am start -S -W com.example.quickdev/.ui.activity.SplashActivity

-S 参数会强制停止目标 Activity
-W:等待启动完成并打印耗时(关键参数)

  • 执行结果-冷启动
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.quickdev/.ui.activity.SplashActivity }
Status: ok
LaunchState: COLD
Activity: com.example.quickdev/.ui.activity.SplashActivity
TotalTime: 1573
WaitTime: 1575
Complete
  • 执行结果-热启动
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.quickdev/.ui.activity.SplashActivity }
Warning: Activity not started, its current task has been brought to the front
Status: ok
LaunchState: HOT
Activity: com.example.quickdev/.ui.activity.HomeActivity
TotalTime: 136
WaitTime: 138
Complete
  • 执行结果-暖启动
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.quickdev/.ui.activity.SplashActivity }
Status: ok
LaunchState: WARM
Activity: com.example.quickdev/.ui.activity.SplashActivity
TotalTime: 259
WaitTime: 262
Complete
字段含义单位备注
Status启动状态-ok 表示成功,error 表示失败
LaunchState启动类型-COLD(冷启动)/WARM(温启动)/HOT(热启动)
Activity实际启动的 Activity-可能被 Intent Filter 重定向
TotalTimeActivity 自身启动耗时毫秒(ms)从创建到首帧完成
WaitTime系统总等待时间毫秒(ms)包括系统资源准备时间
Complete完成标记-仅表示命令执行完毕

启动类型(LaunchState)

  • COLD:完全冷启动(进程不存在)
  • WARM:温启动(进程存在但Activity被销毁)
  • HOT:热启动(Activity仍在栈中)

时间统计原理

  • TotalTime:通过 ActivityRecord 的 windowsDrawn 时间戳计算
  • WaitTime:包含 AMS(ActivityManagerService)调度时间

WaitTime 包含系统调度开销(如 CPU 竞争),所以总是大于或等于TotalTime


BenchmarkRule

BenchmarkRule 是 Android Benchmark 库中的一个 JUnit 规则(@Rule),用于在 单元测试(JUnit4)环境下进行性能基准测试。它能够测量代码片段的执行时间,并提供 抖动控制 和 精确的 CPU 时间测量,适用于 方法级别的性能评估。

使用要求

  • Android 10以上设备运行
  • 装机应用为release版本
  • 测试应用需要在Manifest里面声明:
 <application>
        <profileable android:shell="true"/>
</application>
  • 运行时需在主项目build.gradle指定 androidx.benchmark.junit4.AndroidBenchmarkRunner 作为 runner
 android {
       defaultConfig {
       //testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 替换掉这个
        testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner"
       }
}
  • 运行设备要为 userdebug 模式,可 root

Macrobenchmark(宏基准测试)

在项目根目录 New -> Moudle 选择 benchmark 、Macrobenchmark ,Finsh 创建宏基准测试模块。

在这里插入图片描述
定义
宏基准测试主要关注整个应用程序或大部分应用功能的性能表现。它通常测试的是较大的操作或完整的业务流程,比如用户登录、数据加载、界面渲染等。

目的
衡量应用程序在真实使用场景下的总体性能,通常关注用户的整体体验。

示例
1.测试整个应用启动的时间。
2. 测试一个完整的用户交互流程的响应时间,比如从点击按钮到完成操作的时间。
3. 测试应用加载某个大数据集的性能。


当模块创建完毕后,会在清单文件自动生成

        <profileable
            android:shell="true"
            tools:targetApi="29" />

和主项目的build.gradle 中

        benchmark {
            initWith release
            matchingFallbacks = ['release']
            signingConfig signingConfigs.release //++
        }

其中 signingConfig signingConfigs.release 是后面要加的,代表运行的时候指定签名配置。否则会报错:
Exception thrown during onBeforeAll invocation of plugin AndroidTestApkInstallerPlugin: ErrorName: INSTALL_PARSE_FAILED_NO_CERTIFICATES

其他的配置不需要更改,benchmark 模块默认配置如下:

    buildTypes {
        // This benchmark buildType is used for benchmarking, and should function like your
        // release build (for example, with minification on). It's signed with a debug key
        // for easy local/CI testing.
        benchmark {
            debuggable = true
            signingConfig = debug.signingConfig
            matchingFallbacks = ["release"]
        }
    }

看别人的 debuggable 不能为true,不过我的为true好像也没什么影响。

启动测试

先打包release版本apk,安装进可 root 设备。接着在 benchmark 模块下的 ExampleStartupBenchmark 类中 启动 startup 方法,左边有个小箭头直接启动即可。

代码介绍如下:

    @Test
    public void startup() {
        // 调用 mBenchmarkRule.measureRepeated 方法进行重复测量,记录应用启动性能
        mBenchmarkRule.measureRepeated(
                // 第一个参数是包名,指定测试的应用包名
                "com.example.quickdev",
                // 第二个参数是要收集的性能指标,这里使用的是 StartupTimingMetric 来度量启动时间
                Collections.singletonList(new StartupTimingMetric()),
                // 第三个参数是编译模式,DEFAULT 表示使用默认编译模式
                CompilationMode.DEFAULT,
                // 第四个参数是启动模式,COLD 表示冷启动,意味着应用从完全退出状态启动
                StartupMode.COLD,
                // 第五个参数是测量次数,这里指定了测量 5 次
                5,
                // 第六个参数是一个 Lambda 表达式,表示测量期间需要执行的操作
                scope -> {
                    // 按下 Home 键,模拟用户离开应用并返回桌面
                    scope.pressHome();
                    // 启动并等待指定应用,等待应用启动完成后再继续执行后续操作
                    scope.startActivityAndWait();
                    // 返回 null,表示操作执行完毕
                    return null;
                });
    }
冷启动测试结果

在这里插入图片描述
在这里插入图片描述

暖启动测试结果

在这里插入图片描述
在这里插入图片描述

热启动测试结果

在这里插入图片描述
在这里插入图片描述
可点击右侧测试次数的下标,点进去查看详细的测试信息,在第二张图的左上角可以查看cpu的消耗,左下找到当前应用行,查看代码具体耗时信息,右侧 Frames Chart可查看代码耗时火焰图展示书数据等。可以分析 CPU & 线程使用情况(避免 主线程阻塞)、查看火焰图,找到性能瓶颈(减少不必要的方法调用)

📊 BenchmarkRule vs. Macrobenchmark

  • BenchmarkRule → 方法级测试,适用于小型、局部代码性能分析(如字符串拼接、循环优化)。
  • Macrobenchmark → UI 级测试,适用于整个应用的性能分析(如 Activity 启动时间、RecyclerView 滚动性能)。
【Android】性能优化之内存、网络、布局、卡顿、安装包、启动速度优化 欢迎来到 Android 开发老生常谈的性能优化篇,本文将性能优化划分为内存、网络、电量、布局、卡顿、安装包、启动速度七块,从这七块优化出发,阐述优化的 Application 的方式。 阅读详情

相关推荐

Android性能优化:这是一份Github下载超10万次的360°全方面性能调优指南(含内存优化、布局优化等)

性能调优的目的 性能调优的目的曾经,我的前前东家系统研发部门来了一位大神,为什么叫他大神? 因为在他来公司的一年时间里只做了一件事,就是把服务器的数量缩减到了原来的一半,系统的性能指标,反而还提升了。 好的系统性能调优不仅可以提高系统性能,还能为公司节省资源。这也是我们做性能调优的最直接的目的。 但是很多人脑子里只有一个模糊的概念,那么调优到底是什么呢?这份《360°全方面性能调优》把它盘的明明白白,以及设计思路与代码质量优化(六大原则、设计模式、数据结构、算法)、程序性能(启动速度、Systrace 和

云雾蜜蜜,咩咩 1654

安卓 jetpack compose

以下是 Jetpack Compose 中常用的一些组件的列表:演示: 1. Column(垂直布局) 用于在垂直方向上排列子组件。可以通过 和 控制子组件的排列方式和对齐方式。 2. Row(水平布局) 用于在水平方向上排列子组件。与 类似, 也支持 和 属性。 3. Box(层叠布局) 允许子组件在层叠的形式中存在,可以用来创建重叠的UI效果。 4. LazyColumn 和 LazyRow(滚动列表) 和 类似于 RecyclerView,在展示大量数据时非常有用。 5. Sca

heeheeai的博客 1120

使用Baseline Profile提升Android应用启动速度的终极指南

Baseline Profile是提升Android应用启动性能的利器,通过合理的配置和使用,可以实现30%以上的启动速度提升。关键点最佳实践路径覆盖覆盖所有启动路径和核心功能更新策略重大版本更新后重新生成尺寸控制使用过滤条件保持<1.5MBCompose优化强制编译Composable组件效果验证使用Macrobenchmark量化结果扩展阅读Android官方Baseline Profiles指南深入理解ART运行时优化Jetpack Macrobenchmark进阶使用。

时小雨的专栏 1565

【Android白居易】性能工具(二)Android profile简介

Android Profiler是Android Studio中集成的性能分析工具,用于监控和优化Android应用的性能。它能够分析应用的内存使用、CPU性能、网络活动等关键指标,帮助开发者识别和解决性能瓶颈,如应用响应慢、动画不流畅或电池消耗过快等问题。通过配置AndroidManifest文件中的相关属性,开发者可以启用Profiler进行深入分析。简而言之,Android Profiler是提升应用性能不可或缺的工具,适合所有层次的开发者使用。

lpmuk的博客 656

android 如何分析应用的内存(十三)——perfetto

从2018年始,android开发者峰会正式推出perfetto工具。从此perfetto成为安卓最重要的工具之一。在2018年以前,android使用systrace工具,进行同样的工作。第零个工具xdd:只能查看任意内存第一个工具gdb:它可以查看:寄存器,和任意位置的内存,分析coredump,能查看栈情况,不能查看堆情况第二个工具lldb:它可以查看:寄存器,和任意位置的内存,分析coredump,能查看栈情况,不能查看堆情况。

安仔的博客 8410

37张图详解MAC地址、以太网、二层转发、VLAN

MAC 地址 每个网卡或三层网口都有一个 MAC 地址, MAC 地址是烧录到硬件上,因此也称为硬件地址。MAC 地址作为数据链路设备的地址标识符,需要保证网络中的每个 MAC 地址都是唯一的,才能正确识别到数据链路上的设备。 MAC 地址由 6 个字节组成。前 3 个字节表示厂商识别码,每个网卡厂商都有特定唯一的识别数字。后 3 个字节由厂商给每个网卡进行分配。厂商可以保证生产出来的网卡不会有相同 MAC 地址的网卡。 现在可以通过软件修改 MAC 地址,虚拟机使用物理机网卡的 MAC 地址,并不能保.

networktp的博客 4745

Android Studio Bumblebee (2021.1.1)稳定版发布

文章目录简介Build and DeployNew Device Manager(全新改版的设备管理器 )ADB over Wi-FiLayout ValidationDevelop & Profile改进的CPU Profiler混淆代码的智能编辑器IntelliJ IDEA 2019.3更新Kotlin Android live templatesClangd support for C++Build构建分析器Java 8 Language library desugaring in D8 an

chends 4988

谷歌(Google) Pixel 8/9 Pro(xl)如何获取 root 权限

谷歌(Google)Pixel8/9Pro(xl)等系列手机破解后,会在你的init_boot.img同路径生成一个magisk_patched.img,把这个文件拷贝到adb目录下,稍后还得把它刷回手机,这样手机才能获得Root权限,因为安卓14、15以后的内核结构调整,和Pixel7及以下的6、5、4、3、2等系列手机破解稍微不一致。因为ROOT权限的获取,需要使用ROM中的内核文件,个人强烈建议在官网下载ROM,直接刷最新版,其他地方的ROM如果没有校验码,请自行斟酌是否使用。

bugsycrack的博客 3486

Android Studio 的过往版本

本页面列出了 Android Studio 之前的每个主要版本的新功能和改进。如需了解最新版本的新功能,请参阅当前的。如需了解与发布版本有关的最新资讯(包括每个预览版中的重要修正的列表),请参阅。如需了解 Android Gradle 插件中的新变化,请参阅其。

格物致知的专栏 [音视频编解码 网络协议 计算机视觉 计算机图形学 图像理解 语音识别 机器学习 模拟电路 传感器] 1万+

【抖音】a_bogus参数逆向分析

点击——展开xxx条回复﹀就会出现。可以看到这个栈是有请求相关的数据的。所以就是在bdms.js里面生成的。

qq_44990881的博客 3000

基于资源预测的Agent弹性伸缩:在成本与响应延迟间寻找最佳平衡点

手动伸缩:完全由运维人员人工调整副本数或服务器数量,效率极低,现在基本只用于极小规模的业务。反应式伸缩:基于当前实时监控指标触发伸缩规则,比如CPU利用率超过70%就加2个副本,是目前应用最广泛的方案,典型代表是K8s HPA、KEDA。预测式伸缩:基于历史时序数据预测未来的负载,提前进行伸缩,解决反应式伸缩的滞后性问题,典型代表是AWS Predictive Scaling、阿里云预测式HPA。智能Agent伸缩。

SuperAGI2025 133

2021Android性能优化总结最新、最全面、最完整的资料

[](()性能优化 今天想说的重点是Android APP 性能优化,也就是在开发应用程序时应该注意的点有哪些,如何更好地提高用户体验。一个好的应用,除了要有吸引人的功能和交互之外,在性能上也应该有高的要求,即时应用非常具有特色,在产品前期可能吸引了部分用户,但是用户体验不好的话,也会给产品带来不好的口碑。那么一个好的应用应该如何定义呢?主要有以下三方面: 业务/功能 符合逻辑的交互 优秀的性能 众所周知,Android 系统作为以移动设备为主的操作系统,硬件配置是有一定的限制的,虽然配置现

m0_54850467的博客 332

Orbbec-Gemini-335 深度相机 Python SDK 编译与配置全记录(Windows 环境)

本篇博客将围绕 Windows 系统下 Orbbec SDK 的 Python 配置与编译过程进行详细说明,主要使用的是官方提供的 pyorbbecsdk Python wrapper 项目以及 Orbbec SDK V2 Python Wrapper 配置指南,并记录了安装与配置过程中遇到的若干问题及解决办法。

Junseer的博客 1965

突破手机边界:Windows 11运行安卓应用的高效方案

你是否遇到过这样的困扰:想用电脑处理手机上的消息却要频繁切换设备?想在大屏幕上玩安卓游戏却被模拟器的卡顿折磨?Windows Subsystem for Android(WSA)正是为解决这些痛点而生的革命性方案。相比传统安卓模拟器动辄30%以上的性能损耗、复杂的配置流程和参差不齐的兼容性表现,WSA凭借与Windows内核的深度整合,实现了近乎原生的运行效率和无缝的系统集成。 ## 传统安卓运

gitblog_00404的博客 561

【计算机科学导论实验】加法图灵机模拟 题解

本文提供计算机科学导论课程“图灵机加法器”实验的个人思路,仅供参考。

Chavapa's blog 2576

130页5万字某市档案馆数字档案馆建设方案

【版权声明】本资料来源网络,仅用于行业知识分享,供个人学习参考,请勿商用。【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间进行删除!完整资料领取见文末,部分资料内容:国家档案局证实颁布《数字档案馆建设指南》, 明确了数字档案馆建设原则、要求、目标,对相关系统建设内容、功能要求进行了概括和详细说明。数字档案馆系统建设应以 OAIS&nbsp;参考模型为设计基础,以实现数字资源的长期保存与可信管理。设计的数字档案馆系统架构如下图。图-1 数字档案馆体系结构数字档案馆建设包括五大层次和三大保障体系:

zuoan1993的博客 1180

Android_性能优化

xd0123456789的博客 145

DB文件在编程中的作用及示例代码

通过使用DB文件,我们可以实现数据的持久化存储,并能够高效地进行数据的增删改查操作。在本文中,我们以SQLite数据库为例,演示了如何使用Python语言创建和操作DB文件的示例代码。在实际的编程中,我们可以根据具体的需求和使用的数据库系统来进行更复杂的操作和优化。通过使用DB文件,我们可以实现数据的持久化存储,确保数据在程序关闭后也能被保留,并且能够高效地进行数据检索和更新。在本文中,我们将探讨DB文件的作用,并提供一些示例代码展示如何在编程中使用DB文件。上述代码中,我们使用SQLite提供的。

CodeSpark的博客 1821

Android 性能调优的总结

      经过一段时间的面试,发现很多大公司对“性能调优”这部分的技术提问最多,而且都比较深入,所以今天汇总一下“性能调优”相关技术点,先上一张汇总思维导图。   性能调优         性能调优总结起来就是4个字 “快、稳、省、小”。  1)快            UI                      布局:1.少使用嵌套布局,多用ContraintLayout。...

qwe851023的博客 499

深度学习工具包 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")

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android性能调优与监控

本文详细阐述了Android性能调优与监控的方法和策略。通过优化内存、CPU使用,使用性能监控工具,优化布局和图片加载,开发者可以提升应用性能,确保用户体验。在实际开发过程中,开发者应结合具体场景,选择合适的优化策略。未来,Android性能调优与监控将不断演进,开发者需要关注新技术和方法,持续提升应用性能。优化内存和CPU使用是Android性能调优的关键。使用性能监控工具可以及时发现和解决性能问题。优化布局和图片加载可以提升应用渲染速度。开发者应根据具体场景选择合适的优化策略。

2501_92489025的博客 456

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Universal Android Debloater启动时间:应用程序启动速度优化

你是否曾经因为Android设备启动缓慢而感到困扰?系统预装的冗余应用(Bloatware)不仅占用存储空间,更会显著影响设备的启动速度和整体性能。Universal Android Debloater(UAD)作为一款专业的跨平台工具,通过ADB(Android Debug Bridge)技术帮助用户安全地移除这些不必要的系统应用,从而显著提升设备启动速度。 读完本文,你将获得: - UAD启...

gitblog_00102的博客 748

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【Android Studio性能调优秘籍】:提升编译速度80%的4个实战方法

提升Android Studio编译速度的4个实战方法,解决开发卡顿难题。本android studio教程涵盖Gradle配置优化、硬件加速设置等关键技巧,适用于日常开发与大型项目调优,显著提升效率。值得收藏

FastSolve的博客 1296

安卓性能调优之-掉帧测试

掉帧指的是某一帧没有在规定时间内完成渲染,导致 UI 画面不流畅,产生视觉上的卡顿、跳帧现象。

WriteBug001的博客 1390

Android性能优化与调优深度解析

Android性能优化不仅是技术层面的挑战,更是对用户体验和产品质量的直接体现。随着智能手机功能的日益强大和用户对应用性能要求的不断提高,如何使Android应用在多样化的硬件环境中保持高效、稳定、流畅运行,成为了开发者必须面对的重要课题。Android性能优化是一个涵盖广泛领域的综合工程,包括但不限于内存管理、布局优化、数据加载、启动速度等多个维度,其核心目标是在确保应用功能完整性的基础上,提升应用的响应速度、降低资源消耗、减少卡顿和崩溃现象,从而为用户提供更为优质的使用体验。

望佑 1692

深入探索Android启动速度优化

前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~。 在性能优化的整个知识体系中,最重要的就是稳定性优化,在上一篇文章 《深入探索Android稳定性优化》 中我们已经深入探索了Android稳定性优化的疆域。那么,除了稳定性以外,对于性能纬度来说,哪个方面的性能是最重要的呢?毫无疑问,就是应用的启动速度。下面,就让我们扬起航帆,一起来逐步深入......

IT元老的博客 3253

简析Android APP性能优化之启动速度优化分析

我们开发人员在做开发时除了要实现APP的功能,还要注重性能优化。性能指标包括的方面是非常多的,启动速度、内存、ANR、卡顿等等。其中优化APP的启动速度是一门大学问,借助工具来对APP的启动进行监测,简单又快捷。我使用的是友盟+U-APM应用性能检测工具,它有启动耗时统计这个功能,对我们开发者来说帮助还是非常大的。下面就来谈谈Android APP性能优化之启动速度优化,以及友盟启动分析功能。 启动的状态 我们开发的APP大多数情况下都是冷启动,优化也是主要优化冷启动。 冷启动:冷启动是指应用从头开始

资讯汇 1044
上一篇: 安卓源码学习之【导航方式切换分析及实战】
下一篇: 重学 Android 自定义 View 系列(十二):环形SeekBar剖析
_蓝橙
博客等级 码龄7年 1179粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值