《 Android 高性能编程》——第 10 章:提高性能的小技巧

腾讯优测优分享 | Android应用性能优化个人总结–图形优化 腾讯优测是专业的移动云测试平台,涵盖自动化测试-全面兼容性测试,远程真机租用,漏洞分析等,旗下优分享不定时提供大量的移动研发及测试相关的干货~ 应用UI卡顿常见原因主要在以下几个方面: 1.人为在UI线程中做轻微耗时操作,导致UI线程卡顿; 2.布局Layout过于复杂,无法在16ms内完成渲染; 3.同一时间动画执行的次数过多,导致CPU或GPU负载过重; 4.Vi 阅读详情

1、图像的加载 P336 - 342

(1)如果要处理一个非常大图像,可以使用 BitmapRegionDecoder 将图片进行区域解码,得到部分图像。

(2)通过设置 BitmapFactory.Options.inJustDecodeBounds 可以只得到图像的分辨率而防止其加载到内存中。

(3)BitmapFactory.Options.inSampleSize 与图片的缩小比例有关,该值必须是 2 的整数次幂,如果不是,则会自动向下取得符合要求的值,如 inSampleSize 如果设置为 7,则会取成 4,最终缩放的时候就会使宽、高都变为原来的 1/4,因此,所得到的位图的像素数量是原始的 1/16。而当 inSampleSize <= 1时, 按 1 处理。

优点:计算速度快;缺点:不能达到精确的预期缩放大小。

(4)也可以使用下面的参数进行精确的缩放:
这里写图片描述

参考代码:
这里写图片描述

优点:计算速度慢;缺点:能达到精确的预期缩放大小。

2、图像的缓存 P343 - 348

可以利用 LruChche 和 DiskLruChche 进行内存和磁盘缓存。

这里写图片描述
引用自:https://www.jianshu.com/p/c545f2a6cafc

3、图像的显示 P348 - 350

这里写图片描述

在通过 BitmapFactory 加载位图的时候,可以使用 BitmapFactory.Options.inPreferredConfig 设置格式。

4、Bitmap与管理内存 P350 - 354

通过 BitmapFactory.Options.inBitmap 属性,可以实现 Bitmap 对象的复用,使用的时候需要提供一个已存在的位图对象,让解码器重用该对象的内存空间,达到减少对象销毁与创建的目的。

限制:
这里写图片描述
第二点的意思是,比如,ARGB_8888 像素格式的位图,只能被同为 ARGB_8888 格式的位图对象复用,而不能被其它格式的重用。

具体的重用实现,自行谷歌,因为个人觉得书上的代码示例存在问题。


5、序列化 P336 - 342

JSON 的改进

在 JSON 结构中避免不必要的数据,即客户端用不到的数据。

通过定义属性数组,而非对象数组来减少属性名的重复。如下:
这里写图片描述
这里写图片描述

6、JSON 的替代品 P358 - 365

(1)Protocol buffers

与 XML 类似,都提供了一种定义数据结构都方法,但更小,使用 .proto 作为文件扩展名,最终被创建并传输的,是一个不可读的二进制数据流。

但是,其实现需要使用大量的内存和代码,不太适合移动设备的地方。

具体实现自行谷歌。

(2)Flat buffers

是 Google 创建的,有一个扁平化的二进制一维数组组成。

它需要的内存分配低,同时在字段定义方面,提供了高度的灵活性,代码开销也非常小。而且相对于其他解析器,它能以一种更高效快速的方式解析 JSON 文本。

具体实现自行谷歌。

7、本地序列化 P365

使用数据库来保存数据,避免用序列化的方式

8…..、移除未使用的代码、移除未使用的资源

Android图像处理系列:渲染性能优化——GL多线程的使用 对于一个相机类应用来说,帧率或者流畅度是最关键的性能指标之一。一般来说,相机类应用因为要对图像数据做美颜、滤镜等处理,对每一帧数据的处理流程都比较长。天天P图的相机滤镜链处理过程也很长,中间包含了非常多步的计算和渲染,相机流处理流程中一帧要经过10~20个滤镜处理,即要调用OpenGL draw call10~20次,还包括了很多CPU阻塞操作,包括CPU计算(人脸检测、手势检测等)、纹理上传和下载等,而且滤镜处理数据还在随着产品需求增加而不断增加。如何在保证产品效果需求不断增加渲染和计算的情况下保证用户使 阅读详情

相关推荐

Android高性能编程(1)--基础篇

关于专题       本专题将深入研究Android的高性能编程方面,其中涉及到的内容会有Android内存优化,算法优化,Android的界面优化,Android指令级优化,以及Android应用内存占用分析,还有一些其他有关高性能编程的知识.      随着技术的发展,智能手机硬件配置越来越高,可是它和现在的 PC 相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对

不精通则死 1万+

Android使用Direct Textures提高glReadPixels、glTexImage2D性能

本文档描述改善glReadPixels读取帧缓冲区数据在华为等使用Mali GPU的手机上速度慢的办法。因产品要求应用支持最低平台为Android 4.1,故无法通过Pixel Buffer Object(OpenGL ES 3.0接口,需Android 4.3)提高glReadPixels性能。那么,剩下就一种办法:使用Direct Textures(EGLImage),这是EGL拓展,适用于需要经常更新纹理数据的场合,比如逐帧更新。可用于OpenGL ES 1.0及2.0。 代码示例 Direct

eydwyz的专栏 2433

Android Studio中的Vulkan:高性能图形API

本文旨在为Android开发者提供关于Vulkan图形API的全面指南,涵盖从基础概念到高级应用的完整知识体系。我们将重点讨论如何在Android Studio环境中利用Vulkan进行高性能图形开发。文章首先介绍Vulkan的基本概念和优势,然后深入其架构和核心原理。接着提供实际的代码示例和性能优化技巧,最后探讨实际应用场景和未来发展趋势。Vulkan:跨平台、低开销的3D图形和计算APIGPU:图形处理单元,负责图形渲染和并行计算Pipeline:Vulkan中定义渲染过程的完整状态集合。

移动开发前沿的博客 1125

High Performance之android高性能之路

背景:此乃阅读实践High Performance一书的内容.硬件性能及电池续航电池杀手之一:唤醒工具WakelocksWakelocks可以唤醒(保持唤醒状态)移动设备的部分组件。电池杀手之二:唤醒工具AlarmAlarm允许开发者设置时间执行特定的操作,特别是App在后台运行或者是设备处于休眠状态的时候。有时间精确性要求的提醒应该设置一个准确的Alarm(例如,创建一个闹钟App)。其他的情况可

1025

【学习笔记-QGIS】 QGIS从零快速上手

安装文章参考:https://zhuanlan.zhihu.com/p/370633306。

Xcong_Zhu的博客 1万+

Avalonia跨平台开发入门:从安装到运行第一个应用(Windows/Linux/macOS)

本文详细介绍了Avalonia跨平台开发的基础入门指南,从安装到运行第一个应用的全过程。涵盖Windows、Linux和macOS三大平台的环境配置,特别推荐使用Visual Studio进行开发,并提供常见问题的解决方案,帮助开发者快速上手Avalonia框架。

weixin_28688385的博客 542

编写“高性能”的程序

从事server端开发的同学都知道,提升程序性能是永恒的话题,那么如何让程序性能更高呢?主要分这些几点。 更多知识请关注: 第一,从架构来讲,从单线程处理变为多线程并发,从“共享核”变为独占核,单线程独占cpu中一个核,程序性能当然高,要想让独占核真正发挥高性能,一定不能让程序跑到“内核态”,一定要保持在“用户态”,举个例子,你编写的线程程序的代码中调用大量的printf,就会使程序进入内核态,此时程序的性能就会很低下。如果必须调用特权指令进入到内核态,比如IO操作,置时钟,允许/禁止终端,..

w916124527的专栏 432

python怎样按某一列值拆分Excel表格

pd.ExcelWriter@python #用python按某一列拆分Excel工作表,将内容写入一个工作簿 本次以“按照表中的某一列,将一张表格拆分为多张表”的需求为例,简单介绍这个过程中用到的pd.ExcelWriter,及每一句的作用。 如上表《学生.xlsx》,假设有14万行28列,请按照学校名,拆分表格(不想用复制粘贴)。 ##代码及解释如下 import pandas as pd from time import time#用来计算时间,展示进度,减少焦虑 in_ws='学生.xlsx'#

learn_get的博客 6783

安卓高性能编程(一)

在移动领域,性能高效的应用程序是成功的关键因素之一。如果应用运行缓慢,用户可能会放弃使用。学习如何构建在功能性和用户体验之间平衡速度和性能的应用可能是一个挑战;然而,现在比以往任何时候都更重要的是要找到这种平衡。Android 高性能编程将使你思考如何从应用安装的任何硬件中榨取最大性能,从而你可以扩大影响并提高参与度。本书首先提供了对 Android 最新技术的介绍,以及性能在 Android 应用中的重要性。然后,我们将解释常规用于调试和剖析 Android 应用的 Android SDK 工具。我们还将

龙哥盟 1905

多期DID实战指南:从CSDID原理到分组加权策略

本文深入解析多期DID(CSDID方法)在政策评估中的实战应用,从核心思想到分组加权策略全面讲解。通过电商扶贫等案例,详细演示如何正确处理分批实施政策的数据分析,包括分组拆解、子模块DID操作及加权平均选择,帮助研究者规避常见误区,提升政策评估的准确性。

weixin_26833503的博客 524

EMC辐射发射测试:垂直与水平极化测试原理与实战指南

电磁兼容(EMC)测试是确保电子设备在复杂电磁环境中稳定运行的关键环节,其核心在于评估设备产生的电磁干扰(EMI)强度。辐射发射测试作为EMC测试的重要组成部分,通过测量设备向空间辐射的电磁噪声,判断其是否符合国际标准限值。测试原理基于电磁波的极化特性,即电场矢量的振动方向,主要分为垂直极化和水平极化。理解极化特性对于精准定位辐射源、高效进行EMC整改具有重要技术价值。在工程实践中,垂直极化噪声通常源于线缆辐射等垂直结构,而水平极化噪声多来自PCB走线等水平结构。通过分别测量两种极化方向的辐射最大值,可以全

weixin_32770423的博客 350

初试Android高性能编程OpenCL

OpenCL支持API 21以上的某些Android设备,具体支持得看芯片厂商爸爸给不给力了,不仅仅如此,OpenCL在X86体系基本都有集成,不仅仅是Mac、Ubuntu、Windows、Android等os。详细的网站页可以参考: https://software.intel.com/en-us/iocl-tec-opg-opencl-standard 对应...

sephyioth的专栏 6541

基于Python的Steam游戏评论与销量数据爬取及预测分析

随着数字游戏市场的蓬勃发展,Steam作为全球最大的数字游戏分发平台,积累了海量的游戏数据与玩家行为数据。本文旨在通过Python网络爬虫技术,采集Steam平台的游戏基本信息、玩家评论数据及销量相关信息,为后续的游戏评论情感分析与销量预测模型构建提供数据支持。本文将详细介绍使用requestsselenium等库实现Steam数据爬取的全过程,并提供完整的代码实现与数据处理方法。关键词:Steam;Python爬虫;数据采集;评论分析;销量预测。

2201_76125261的博客 854

Android高性能编程

关于专题 本专题将深入研究Android的高性能编程方面,其中涉及到的内容会有Android内存优化,算法优化,Android的界面优化,Android指令级优化,以及Android应用内存占用分析,还有一些其他有关高性能编程的知识. 随着技术的发展,智能手机硬件配置越来越高,可是它和现在的 PC 相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要

old魏的博客 1165

PCL K4PCS算法实现点云粗配准【2026最新版】

K4PCS算法实现点云粗配准。博客长期更新,本文最近一次更新时间为:2026年5月4日。

点云侠的博客 42万+

030、自动白平衡AWB实战:灰度世界、完美反射与色温估计的工程实现与局限

本文深入探讨了自动白平衡(AWB)算法在工程实践中的实现与局限性。作者结合实际项目经验,分析了灰度世界算法、完美反射算法和色温估计三种主流方法的优缺点和适用场景,并分享了调试过程中的关键技巧和常见陷阱。文章指出,纯色背景、多光源环境等特殊场景容易导致算法失效,需要通过混合策略和场景检测来优化。作者强调AWB调试需要大量实际场景测试,建议保留手动调节功能,并针对不同硬件配置进行参数标定。最后提出,AWB优化是一个持续迭代的过程,需要工程化的测试方法和数据处理能力。

zzfmlxs的博客 280

安卓高性能编程实战:优化工具与关键策略

移动应用性能优化是提升用户体验的核心技术,尤其在资源受限的安卓设备上更为关键。从原理上看,性能问题通常源于内存泄漏、线程阻塞或过度绘制等底层机制。通过Android Profiler、LeakCanary等工具链可以精准定位问题,而合理使用线程池、协程等并发技术能有效提升执行效率。在工程实践中,RecyclerView优化、网络请求缓存和启动时间分析等技术方案已被证明能显著改善应用性能。本文通过Systrace工具诊断JSON解析阻塞等典型案例,展示如何构建从诊断到优化的完整性能提升体系,特别适用于面临AN

weixin_26876073的博客 277

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

安卓高性能编程(三)

阅读本章节后,读者将能够使用 NDK 本地或在 Android 应用程序中以混合方式构建应用程序。此外,我们建议读者查看一些其他框架,特别是 OpenCV。学习 OpenCV 本身可以成为一本书的主题。然而,如果读者正在处理繁重的图像处理,他/她会发现这个框架非常有用。使用 NDK 时的一个关键点是确定复杂性与性能之间的正确权衡。使用 NDK 解决复杂的计算问题可能很有诱惑力,而且当涉及到图像处理、OpenGL、计算机图形学或动画时,应该明确作出决定。

龙哥盟 798

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android开发实战:打造高性能APP的秘诀

本文从优化布局、提高运行效率、提升用户体验等方面,详细阐述了Android开发实战中打造高性能APP的秘诀。在激烈的市场竞争中,高性能的APP能够为用户提供更好的体验,提高产品的竞争力。为了实现这一目标,开发者需要不断学习新技术、积累经验,并在实际开发中运用这些优化方法。在未来,Android开发领域将继续发展,高性能APP的需求也将不断增长。深入研究FlutterKotlin等新技术,提高开发效率。关注5GAI等新兴技术,为APP赋予更多可能性。加强跨平台开发能力,拓展APP的应用范围。

2501_92487360的博客 449

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【小米App】用Android Studio开发安卓应用的编程语言有哪些?各自的有缺点是什么?

在 Android Studio 开发安卓应用时,主要支持的编程语言包括和,每种语言都有其优缺点。:新项目首选,尤其是需要快速开发和维护的现代应用。:维护旧项目,或团队熟悉 Java 且无迁移计划。:音视频处理、3D 游戏等对性能要求极高的模块。:需要快速开发跨平台应用,且对原生性能要求不苛刻的场景。

Flask Web 1803

Android平台上的高性能编程

由于计算机视觉方面的大部分算法不仅需要很多计算资源,也需要频繁地访问内存,因此很多在PC上可以实时跑起来且效果良好的方案在移植到Android这样的移动平台上往往表现很差。本文总结下自己这些天对Android平台上的高性能编程的调研结果,供学习交流。 首先,说一下我了解到的硬件趋势。CPU方面,移动平台多为ARM架构,属于RISC指令集,主流已经过了单核、双核、四核、八核甚至十二核、十六核这几个

Practice of Awakewind 1918

安卓高性能编程(二)

应用程序的网络方面是最具挑战性的问题。从应用程序的网络策略来看,你可以从这个角度找到可以优化的东西。为此,我们处理了 Android 上的API,以便更好地理解我们可以用它做什么,分析如何使用不同的网络协议,设置不同的请求方法类型,向请求中添加额外的参数,如头部和 cookies,以及处理通信中的压缩。然后,我们概述了平台上可用的连接类型,以了解我们的应用程序在网络传输中可以达到的速度。然后,在最佳实践部分讨论的模式在提高网络性能方面非常有用。

龙哥盟 816

Android如何高性能编程

如何实现Android的高性能编程,就涉及到Android的内存优化,算法优化,Android的界面优化,Android指令级优化,以及Android应用内存占用分析,还有其他的知识。 作为开发人员,算法和数据结构永远是我们最先考虑的事情,同时还要记得两个基本原则:1.不要做不必要的事;2.不要分配不必要的内存。 1)内存优化 Android系统对每个软件所能使用的RAM空间进行了限制(例如

csuhanshuai的专栏 1520

探秘Facebook的Litho:高性能Android UI框架

是由Facebook开源的一个用于构建高效、可预测且易于维护的Android用户界面(UI)的库。它采用声明式编程模型,将布局描述和状态管理相结合,旨在提升应用性能,并降低复杂的UI开发难度。 ## 技术分析 ### 声明式编程 与传统的Android布局XML或Java/Kotlin代码混杂的方式不同,Litho采用了声明式编程。开发者只需描述UI的最终形态,而无需关心具体如何绘制。这种模...

gitblog_00041的博客 566
上一篇: 95. 不同的二叉搜索树 II
下一篇: 用 layer-list 实现指定边际的边框
OneDeveloper
博客等级 码龄9年 61粉丝 161原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值