关于youtube上Android Performance Patterns的总结(部分)

2024-02-20 19:20

本文主要是介绍关于youtube上Android Performance Patterns的总结(部分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.熟悉android studio关于Logcat,Memory,CPU,GPU,Network分析窗口的使用。一旦你配置的内存突然下降,那么应该是GC在发挥作用。这些垃圾收集活动通常不会太大影响性能,但是短时间内频繁的出现,会迅速消耗帧时间,还是会导致性能问题的。

2.内存泄露:指的是应用不再使用的对象,但是垃圾收集没有把它们辨认出来。结果是它们一直留在你的内存里。
android运行环境中的内存堆:
这里写图片描述
android runtime内存堆被有效的划分为不同的区块,根据配置的类型,还根据系统为将来的垃圾收集活动对这些配置的最佳整理。新的对象被配置时,会考虑到这些特点,来决定哪一个区块最合适这个配置。

3.GC的两个主要原则:
1.找到程序里以后都不会使用的数据对象。
2.重新收回这些对象占用的资源。
知道两点:
1.在规定时间内应用垃圾收集时间越长,那么剩下的用于16ms内完成光栅化的逻辑处理时间就更短。如果有连续的大量垃圾收集,或者长时间的垃圾收集,可能会超过16ms,就会导致用户视觉上的卡顿。
2.要知道你的码流可能会执行一些工作,迫使GC发生的更加频繁,或者持续时间更长,比如,在向内部循环中进行一大堆重要对象配置时,就会花费很长时间。这一大堆对象就会污染内存堆。

4.内存流失:在短时间内配置大量的对象,并将它们极短时间内进行释放,就会出现内存流失。如果在内存监控中,看到有内存抖动,那么八九不离十从那里下手。
解决办法:
1.要确保没有在内循环内,为了明显原因配置对象。试着将它们移出到循环之外,或者直接避免它们。还有onDraw函数中也是一样(本质相同)。
2.如果非要创建对象,可以考虑对象池模式。实际上,你会有一个用于配置一组对象的对象池,你的代码不必每次都到堆里去,它可以从内存池里抓取可获得的对象。
这里写图片描述
这种模式的弊端:你得自己负责释放对象,在使用完要将它们释放进内存池。也就意味着对于高扰动对象,就会需要消耗一些精力,在创建和销毁时合理管理这些对象。(跟getView方法中的模式很像)。

5.关于JobScheduler API的介绍:如何在低电量情况下做事。工具battery historian。

一言以蔽之, 就是把不紧急的工作留待条件更充分的时候完成.

更好的条件包括wifi, 充电, 手机处于休眠状态等…

如果APP有符合如下情况的任务, 可以尝试使用JobScheduler机制执行任务:
可以推迟的非面向用户的任务(如定期数据库数据更新)
当充电时才希望执行的工作(如备份数据)
需要访问网络或 Wi-Fi 连接的任务(如向服务器拉取内置数据)
希望作为一个批次定期运行的许多任务

代码上所需做的工作是将相关任务放置到JobService, 并根据应用情况设置Service启动条件, 可以是如下条件:

当设备充电时启动
当设备连接到不限流量网络(wifi)时启动
当设备空闲时启动
在特定的截止期限之前或以最小的延迟完成
只有当条件得到满足, 系统才会启动计划中的任务.

只要一切执行到位, 对手机续航的提高当然显而易见.

6.关于overdraw:
过度绘制发生的原因是,硬件使用太多的周期来绘制屏幕上的像素,而这些像素到最后都不会组成图片。
现在安卓系统会自动尽量减少过度绘制,它可以试着避免绘制那些完全隐藏于不透明表面之下的项目 。
但是这项技术没有再深入发展,没有复杂的定制视图,还不能覆盖onDraw方法。这些情况下,系统无法了解你是如何绘制内容的,从而很难知道自己应该避免什么。
解决办法:通过使用canvas.cliprect API帮助系统好观察到这一过程。这个功能允许你为自己给出的视图规定可绘制边界,只有矩形框内的项目可以被绘制。
这个API还能保护CPU和GPU的性能:
CPU:每一条canvas绘制命令,将它们提交给OpenGL ES进行绘制时,都会有一点点额外负担。任何clipRect之外的绘制命令都不会提交至硬件,也就不会产生额外负担。
现在,任何与clipRect有部分交叉的内容还是会被绘制。
这也是clipRect在GPU方面可以帮助定义排除矩形,从而从像素层面上让GPU避免为裁剪部分上色的原因。

除了clipRect,还可以使用qucikreject API,他可以让你在你的onDraw功能内部,测试clipRect的交叉部分。

可以使用GPU Overdraw工具进行监测。

7.对于绘制的工作原理:
android系统的工作原理

这篇关于关于youtube上Android Performance Patterns的总结(部分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/729278

相关文章

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja