Android性能调优

Android 进阶——调试调优利器 ADB常用指令大全 文章大纲引言一、ADB1、ADB 概述2、ADB 架构概述3、ADB 的基本操作3.1、ADB 的启动和关闭3.2、指定特定的目标设备3.3、指定adb server的通信端口二、adb shell am1、adb shell am start启动指定Activity2、adb shell am startService启动指定Service3、adb shell am broadcast 发送广播4、adb shell am force-stop 强制停止指定应用三、adb shell pm1、adb 阅读详情

本文主要分享自己在娱乐精选(功能类似垂直类appstore)项目中的性能调优点,包括同步改异步、缓存、Layout优化、数据库优化、算法优化、延迟执行等。
一、性能瓶颈点
整个页面主要由6个Page的ViewPager,每个Page为一个GridView,GridView一屏大概显示4*4的item信息(本文最后有附图)。由于网络数据获取较多且随时需要保持页面内app下载进度及状态,所以出现以下性能问题
a.  ViewPager左右滑动明显卡顿
b.  GridView上下滚动明显卡顿
c.  其他Activity返回ViewPager Activity较慢
d.  网络获取到展现速度较慢


二、性能调试及定位

主要使用traceview、monkey、monkey runner调试,traceview类似java web调优的visualvm,使用方法如下:
在需要调优的activity onCreate函数中添加

onDestrory函数中添加

程序退出后会在sd卡根目录下生成Entertainment.trace这个文件,cmd到android sdk的tools目录下运行traceview.bat Entertainment.trace即可,截图如下

traceview从中可以看出各个函数的调用时间、调用次数、平均调用时间、时间占用百分比等从而定位到耗时的操作。traceview、monkey、monkey runner更详细的见后面博客介绍


三、性能调优点

主要包括同步改异步、缓存、Layout优化、数据库优化、算法优化、延迟执行。
1. 同步改异步

这个就不用多讲了,耗时操作放在线程中执行防止占用主线程,一定程度上解决anr。
但需要注意线程和service结合(防止activity被回收后线程也被回收)以及线程的数量(后面优化介绍)
PS:请使用java的线程池(后面介绍),少使用AsyncTask,因为AsyncTask存在性能问题(以后会单独博文介绍)


2. 缓存

java的对象创建需要分配资源较耗费时间,加上创建的对象越多会造成越频繁的gc影响系统响应。主要使用单例模式、缓存(图片缓存、线程池、View缓存、IO缓存、消息缓存、通知栏notification缓存)及其他方式减少对象创建。
(1). 单例模式
对于创建开销较大的类可使用此方法,保证全局一个实例,在程序运行过程中该类不会因新建额外对象产生开销。示例代码如下:


(2). 缓存
程序中用到了图片缓存、线程池、View缓存、IO缓存、消息缓存、通知栏notification缓存等。
a. 图片缓存:见ImageCache和ImageSdCache


b. 线程池:
使用Java的Executors类,通过newCachedThreadPool、newFixedThreadPool、newSingleThreadExecutor、newScheduledThreadPool提供四种不同类型的线程池


c. View缓存:

通过convertView是否为null减少layout inflate次数,通过静态的ViewHolder减少findViewById的次数,这两个函数尤其是inflate是相当费时间的


d. IO缓存:

使用具有缓存策略的输入流,BufferedInputStream替代InputStream,BufferedReader替代Reader,BufferedReader替代BufferedInputStream.对文件、网络IO皆适用。


e. 消息缓存:
通过Handler的obtainMessage回收就的Message对象,减少Message对象的创建开销
handler.sendMessage(handler.obtainMessage(1));


f. 通知栏notification缓存:
下载中需要不断改变通知栏进度条状态,如果不断新建Notification会导致通知栏很卡。这里我们可以使用最简单的缓存
Map<String, Notification> notificationMap = new HashMap<String, Notification>();如果notificationMap中不存在,则新建notification并且put into map.


(3). 其他
能创建基类解决问题就不用具体子类:
除需要设置优先级的线程使用new Thread创建外,其余线程创建使用new Runnable。因为子类会有自己的属性创建需要更多开销。
控制最大并发数量:使用Java的Executors类,通过Executors.newFixedThreadPool(nThreads)控制线程池最大线程并发
对于http请求增加timeout

 

3. Layout优化
性能优化相关的一些标签 <viewStub/>,<merge/>和<include/> 可见:http://hexen.blog.51cto.com/1110171/820197
TextView属性优化:TextView的android:ellipsize=”marquee”跑马灯效果极耗性能,具体原因还在深入源码中
对于layout中的布局实际效果可使用hierarchyviewer查看
对于layout中多余的view以及不正确的标签可使用android lint查看

 

4. 数据库优化
主要包括sql优化、建立索引、使用事务、读写表区分
(1). sql优化

可参考http://database.51cto.com/art/200904/118526.htm

(2). 建立索引
使用CREATE INDEX mycolumn_index ON mytable (myclumn)语句在SQLiteOpenHelper子类的onCreate或onUpgrade函数创建索引,索引创建后对大数据量的查询性能提升效果较明显

(3). 使用事务
事务不仅能保证批量操作一起完成或回滚,而且在大量插入、更新、查询时减少程序和表的交互从而提高性能

(4). 读写表区分
对于查询操作使用dbHelper.getReadableDatabase();读表代替写表。因为sqlite是表级锁,所以修改和插入等写操作的性能较差。


5. 算法优化

这个就是个博大精深的话题了,只介绍本应用中使用的。
使用hashMap代替arrayList,时间复杂度降低一个数量级


6. 延迟执行

对于很多耗时逻辑没必要立即执行,这时候我们可以将其延迟执行。
线程延迟执行 ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(10);
消息延迟发送 handler.sendMessageDelayed(handler.obtainMessage(0), 1000);


四、本程序性能调优结果
1. ViewPager左右滑动明显卡顿
2. GridView上下滚动明显卡顿

(1). 去掉TextView的android:ellipsize=”marquee”
(2). 修改图片缓存的最大线程数,增加http timeout
(3). 修改设置app是否已安装的状态,具体代码修改如下:

修改为

从每次获取List<PackageInfo> installedAppList = getPackageManager().getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);修改为只在有应用安装或卸载广播时获取应用列表,并且用hashMap代替installedAppList减少查询时间。

将平均执行时间从201ms降低到1ms。


3. 其他Activity返回ViewPager Activity较慢

定位:在onStart函数
解决:使用延迟策略,具体代码修改如下:

改为


4. 网络获取到展现速度较慢

定位:在HttpURLConnection.getInputStream()之后的处理
解决:使用BufferedReader替代BufferedInputStream获取时间从100ms降低到3ms,具体代码修改如下:

改为

 

 

附 娱乐精选截图:

initpintu_副本

安卓开发入门到精通!深入浅出Android性能调优,值得收藏! 1.写在前面 想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样。 2020届的秋招提前批已近尾声,目前Android开发岗已拿到的offer有[百度],[字节跳动],[美团点评],[网易],岗位均为Android开发方向。距离毕业答辩还有点时间,写写我的互联网转行之路。 先介绍一下自己的背景,北航本硕,学习成绩中上,有两个学科竞赛奖项,一篇SCI。 计算机方面,没有实习,只有一个略微相关的项目能写到简历里面。专业知识全靠自学,所以过程也异常痛苦。准备时间 阅读详情

相关推荐

Android性能调优:Systrace工具使用

Systrace是Android系统提供的一个性能分析工具,它能够记录系统运行过程中的各种事件,并以图表的形式呈现出来。通过Systrace,开发者可以直观地了解到应用的CPU、内存、GPU等硬件资源的利用情况,从而找到性能瓶颈并进行优化。本文详细介绍了Systrace工具的使用方法,以及在Android性能调优中的应用。通过Systrace,开发者可以直观地了解到应用的性能状况,找到性能瓶颈并进行优化。在实际开发过程中,开发者应该充分利用Systrace工具,提升应用的性能,为用户提供更好的体验。

2501_92489014的博客 615

Android性能优化(一),总纲

总体上来说,想要写出高效代码,我们要遵循两条基本的原则: -不作没有必要的工作。 -尽量避免内存分配。 一、容易引发性能问题的点: - IO操作 - 数据库 - 网络 - 线程同步 - 架构,算法,数据结构 - 程序逻辑 二、找出性能瓶颈的方法 1.Code Review 2.代码性能测量 2-1.通过性能Log记录函数调用时间 Log.d("Performance",

可乐 1089

项目管理-(补充)七种基本质量工具

七种基本质量工具,用于PDCA循环的架构内 解决与质量相关的问题,分为老七工具和新七工具。 1)老七种:刘英只点劣质茶(流程图、因果图、直方图、散点图、帕累托图、控制图、核查表)2)新七种:锯树联亲测动优(矩阵图、树形图、关联图、亲和图、过程决策程序图、活动网络图、优先矩阵)

weixin_42081167的博客 4603

运用PowerHint改进Android系统性能表现

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

ZT's Blog 4447

Camera(5)metadata

Metadata 是整个 Android camera 中类似于高楼大厦中的管道系统一样,贯穿了整个 Camera 的 Framework 和 vendor HAL。Metadata 里面包含了所有的控制、参数、返回值等等。Metadata分为Android原生的Metadata和芯片商或者用户自定义的Metadata,即Android Tag和Vendor Tag。Vendor Tag在Hal中定义,并在camx和chi目录中使用。

qq_55893245的博客 3050

AVL_Cruise_interface\Simulink联合仿真

分享了AVL_Cruise通过interface模块与Simulink进行联合仿真的过程

qq_64735036的博客 2677

Android优化篇之网络优化

单 工通信:数据只能一方发送到另一方。(例:UDP协议,Android广播) 2. 半双工通信:数据可以从A发送到B,也可以从B发到A,但同一时刻,只能有一个方向的数据传输。(例:Http协议,向服务器发起请求,服务器返回响应) 3. 全双工通信:任意时刻,都会存在A到B和B到A的双向传输。(例:Socket协议,长连接通道,IM聊天,视频通话)

嘴巴吃糖了 1145

MS1030超声波流量计电路实战:如何用15ps精度优化水表设计(附配置代码)

本文深入探讨了如何利用MS1030超声波流量计芯片实现15ps高精度测量,以优化水表设计。文章从系统误差分配出发,详细解析了硬件电路设计要点、SPI通信配置及核心优化技巧,如利用可编程偏置电压和8回波累加功能来提升抗干扰能力与测量稳定性,并附有实用的配置代码示例。

svm4gardener的博客 333

Android 省电模式原理剖析

Android的平台上,耗电量的问题一直被人所诟病。从Lollipop开始,Google也一直非常重视对于省电模式的改造。本篇文章将会基于最新的Android Pie的代码,来系统分析现在Android的省电模式流程,并且对一些可以继续优化的点来给出一些建议。本篇文章将会从SystemUI开始讲起。 QuickSettings 这个图片相信使用android手机的同学都会有所印象,是...

猿氏悟语 1万+

安卓/苹果/支付宝sdk拉起支付宝h5/app支付

代码】安卓/苹果/支付宝sdk拉起支付宝h5/app支付。

m0_68973987的博客 5383

实战指南:利用 LangGraph 的状态管理实现多轮对话的上下文隔离与持久化

本文详细介绍了如何利用LangGraph的状态管理机制,高效实现多轮对话中的上下文隔离与持久化。通过实战代码演示,从基础的消息历史管理到自定义状态扩展,再到使用SQLite进行生产级持久化,系统讲解了如何借助LangGraph的State和Checkpointer自动化处理对话记忆、用户隔离及数据存储,显著提升开发效率。

weixin_28396629的博客 488

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

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

WriteBug001的博客 1390

Google Earth Engine(GEE)——使用归一化燃烧指数 (NBR) 绘制地表烧伤严重程度图

归一化燃烧指数(Normalized Burn Ratio, NBR)是一种遥感指标,用于评估野火或烧伤地面后的植被恢复情况。NBR能增强较大范围的火灾区域,如大于200公顷。它是通过比较远红外波段 (SWIR) 和近红外波段 (NIR) 的反射率来计算的。SWIR波段测量烧伤地面的反射率,NIR波段测量没有受到烧伤影响的植被的反射率。NBR的计算公式为:NBR =(NIR-SWIR)/(NIR + SWIR)。其中,NIR为近红外波段,SWIR为短波红外波段。

此星光明博客 3464

Android性能调优指南

Android应用性能的优劣直接关系到用户体验和应用的生死存亡。以下是关于《Android性能调优指南》的详细阐述,旨在帮助开发者深入了解性能优化的重要性及具体实践方法。性能优秀的应用能够快速响应,为用户提供流畅的操作体验。反之,性能不佳的应用会让人感到卡顿、延迟,甚至频繁崩溃,严重影响用户满意度。性能优化有助于提高应用的稳定性和流畅性,从而降低用户流失率,提高留存率。根据Google的数据,性能优秀的应用留存率比性能不佳的应用高出20%。ConstraintLayout是Android官方推荐的一种布局方

2501_92487295的博客 474

YOLOv8改进,YOLOv8添加DCNv4可变性卷积(windows系统成功编译),全网最详细教程

DCNv4通过两项关键增强解决了其前身DCNv3的局限性:1. 移除空间聚合中的softmax归一化,以增强其动态特性和表达能力;2. 优化内存访问以最小化冗余操作,从而加速计算。这些改进使得DCNv4相比DCNv3显著加快了收敛速度,并且处理速度大幅提升,前向传播速度超过三倍。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 6469

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Android性能调优工具使用

Android性能调优工具主要包括Android Studio内置的性能分析工具和第三方性能分析库。这些工具可以帮助开发者从不同的角度分析应用的性能,找出瓶颈,并进行优化。本文详细介绍了Android性能调优工具的使用,从CPU性能优化、内存性能优化、网络性能优化和布局优化四个方面阐述了性能调优的方法。通过正确使用这些工具,开发者可以找出应用性能瓶颈,并进行针对性的优化。性能调优是一个持续的过程,随着应用规模的扩大和用户需求的不断变化,开发者需要不断调整和优化。

2501_92489169的博客 520

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android 性能调优的总结

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

qwe851023的博客 499

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

visio安装包

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

Android性能调优工具TraceView

e. Cpu Time/Call, Real Time/Call表示总的Cpu Time及Real Time与总调用次数的比例。b. Cpu Time表示占用cpu执行的时间,Real Time包括Cpu Time以及等待、切换的时间等,所以一般都大于Cpu Time。之后运行你的app一段时间并退出会在sd卡根目录生成tracefilename.trace这个log文件,记录这段时间内的运行信息。移动到某个位置可以查看该点对应的方法的执行信息,点击方法面板则会选中相应的方法。方便查看某个函数的时间占比。

2401_87255976的博客 887

Android性能调优与监控

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

2501_92489025的博客 456

Android性能调优工具推荐

Android性能调优工具种类繁多,涵盖了性能监控、内存管理、网络优化等多个方面。选择合适的工具可以帮助开发者快速定位问题、优化性能,从而提升用户满意度。本文推荐了几款实用的Android性能调优工具,包括性能监控工具、内存管理工具和网络优化工具。这些工具可以帮助开发者更高效地优化应用性能,提升用户体验。在使用这些工具时,开发者应结合具体需求和实际情况,选择合适的工具进行性能调优。在未来,Android性能调优工具的发展仍将不断进步,为开发者提供更多便捷、高效的性能优化方案。

2501_92486745的博客 656

Android性能调优工具与实践

Android 设备的流畅运行对于用户体验至关重要。本文将深入探讨Android性能调优工具与实践,帮助开发者优化应用性能,提升用户满意度。

2501_92489088的博客 522

Android性能调优工具

Android性能调优工具是帮助开发者诊断、分析和优化应用性能的软件工具。这些工具可以帮助开发者发现应用中的性能瓶颈,从而进行针对性的优化。下面将从多个方面对Android性能调优工具进行详细阐述。本文详细介绍了Android性能调优工具的各个方面,包括工具分类、功能特点、核心功能以及实际应用。通过合理使用这些工具,开发者可以有效地优化应用性能,提升用户体验。在未来,随着移动应用的不断发展,Android性能调优工具也将不断更新和完善。持续学习:掌握最新的性能调优技术和工具,提升自己的技能。实践经验。

2501_92489070的博客 395

Android性能调优实战技巧

本文详细介绍了Android性能调优的实战技巧,包括分析工具、内存优化、CPU优化、网络优化等方面。通过合理使用Profiler、减少内存占用、优化CPU和减少网络请求,开发者可以打造高性能的Android应用。在未来,随着技术的发展和应用的复杂度增加,性能调优将变得越来越重要。开发者应持续关注性能调优的新技术、新工具,不断提升自己的性能调优能力。同时,建议开发者在实际开发过程中,遵循最佳实践,注重性能优化,为用户带来更好的体验。

2501_92489053的博客 514

Android应用开发之性能调优

本文详细阐述了Android应用开发中的性能调优方法,包括内存优化、布局优化、绘图优化和异步处理等方面。性能调优是提高用户体验、降低应用功耗、提升应用竞争力的关键环节。内存优化:通过减少内存占用和检测内存泄漏,提高应用性能。布局优化:减少布局层级和布局复用,提高布局渲染效率。绘图优化:减少绘图操作和图像优化,提高绘图性能。异步处理:使用异步任务和异步框架,提高异步处理效率。为了实现这些优化,开发者需要不断学习新技术、积累经验,并关注其他人的研究和观点。

2501_92489088的博客 507

告别模拟器!Windows 11安卓应用无缝运行指南:3大方案+性能调优全攻略

在Windows 11系统中运行安卓应用已成为提升工作效率的新趋势,但传统模拟器普遍存在卡顿、兼容性差等问题。本文将通过"痛点解析→方案对比→实施指南→进阶技巧"的四维框架,带您全面掌握Windows Subsystem for Android(WSA)的安装与优化方法,让安卓应用在电脑端实现原生般的流畅体验。 ## 一、安卓应用电脑运行的痛点解析 ### 传统方案的四大瓶颈 目前在Windo

gitblog_00768的博客 2060
上一篇: Android中Service类onStartCommand
下一篇: Android之网络访问(一)android 中对apache httpclient及httpurlconnection的选择
代号码农
博客等级 码龄16年 5粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值