探秘安卓系统开发:优化应用性能的技巧

探秘安卓系统开发,优化应用性能的技巧安卓系统作为目前全球最流行的移动操作系统之一,其开发者们一直在不断探索如何优化应用性能,提升用户体验,本文将从多个方面探讨安卓系统开发中优化应用性能的技巧,1.代码优化代码是应用性能的基石,优化代码可以显著提高应用的运行效率,在安卓开发中,可以采取以下几种方法进行代码优化,避免过度使用内存,及时释放…。

探秘安卓系统开发

安卓系统作为目前全球最流行的移动操作系统之一,其开发者们一直在不断探索如何优化应用性能,提升用户体验。本文将从多个方面探讨安卓系统开发中优化应用性能的技巧

1. 代码优化

代码是应用性能的基石,优化代码可以显著提高应用的运行效率。在安卓开发中,可以采取以下几种方法进行代码优化:

  • 避免过度使用内存:及时释放不再使用的资源,避免内存泄漏。
  • 使用异步方法:避免在主线程中执行耗时操作,可以使用AsyncTask或线程池等方式进行异步处理。
  • 避免过多的循环和嵌套:简化逻辑结构,减少循环和嵌套可以提高代码执行效率。

2. 图形优化

在安卓应用中,图形处理也是影响性能的重要因素。以下是一些优化图形性能的技巧:

  • 使用合适的图像格式:选择合适的图像格式和分辨率可以减小图片的大小,提高加载速度。
  • 避免内存泄漏:及时释放不再使用的Bitmap资源,避免内存泄漏。
  • 使用硬件加速:可以通过开启硬件加速功能提高图形渲染的效率。

3. 网络优化

在现如今的移动应用中,网络请求和数据传输的效率直接影响用户体验。以下是一些网络优化的技巧:

  • 合理使用缓存:可以通过缓存机制减少重复的网络请求,提高数据加载速度。
  • 减少网络请求次数:合并多个小的网络请求,避免频繁的网络通信可以减少数据传输时间。
  • 使用Gzip压缩:对网络传输的数据进行压缩可以减少数据传输量,提高加载速度。

4. 内存管理

安卓应用在运行过程中需要合理管理内存资源,避免内存泄漏和过度占用内存。以下是一些内存管理的技巧:

  • 及时释放不再使用的资源:尤其是Bitmap等占用内存大的资源,及时释放可以避免内存泄漏。
  • 使用内存分析工具:可以借助Android Studio提供的内存分析工具来查找内存泄漏和性能瓶颈。
  • 避免频繁的GC操作:减少对内存的频繁申请和释放可以提高应用的性能。

5. UI优化

良好的用户界面设计可以提升用户体验,以下是一些优化UI性能的技巧:

  • 使用布局优化:避免过度复杂的布局结构,减少嵌套可以提高UI渲染效率。
  • 减少视图层级:避免过多的视图层级可以降低UI的绘制成本,提高界面响应速度。
  • 使用RecyclerView代替ListView:RecyclerView具有更好的性能和扩展性,能够提高列表的展示效率。

6. 电量优化

在移动设备上,电量是宝贵的资源,合理优化应用的电量消耗可以延长设备的续航时间。以下是一些电量优化的技巧:

  • 避免后台运行:及时关闭不必要的后台服务和线程,避免消耗过多的电量。
  • 优化定时任务:合理设置定时任务的执行间隔,避免频繁唤醒设备。
  • 使用省电模式:可以在应用中提供省电模式选项,降低应用在后台运行时的功耗。

7. 安全优化

安全性是移动应用开发中至关重要的一个方面,以下是一些安全优化的技巧:

  • 数据加密:对用户敏感数据进行加密处理,避免数据泄露。
  • 合理权限管理:只请求必要的权限,避免滥用用户隐私。
  • 及时更新:及时修复应用中的安全漏洞,确保应用的安全性。

优化应用性能是安卓开发中至关重要的一环,开发者们可以通过代码优化、图形优化、网络优化、内存管理、UI优化、电量优化和安全优化等多个方面来提高应用的性能,提升用户体验。只有不断探索和优化,才能开发出更加高效稳定的安卓应用。


安卓开发中提高安卓程序效率的15小技巧

安卓开发中提高安卓程序效率的15小技巧

对于一个安卓开发者来说,安卓开发中的提高安卓程序效率也是一项重要的内容,到底如何提高安卓程序效率,如何优化安卓的性能呢?以下达内南宁安卓培训部老师介绍了15种优化安卓的性能的小技巧,希望对广大的安卓开发者有所帮助!

用gzip压缩,设置连接超时时间和响应超时时间

http请求按照业务需求,分为是否可以缓存和不可缓存,那么在无网络的环境中,仍然通过缓存的浏览部分数据,实现离线阅读。

2.使用线程池,分为核心线程池和普通线程池,下载图片等耗时任务放置在普通线程池,避免耗时任务阻塞线程池后,导致所有异步任务都必须等待

3.尽量避免static成员变量引用资源耗费过多的实例,比如Context

性能优化

1).异步加载图片

item中如果包含有webimage,那么最好异步加载

2).快速滑动时不显示图片

当快速滑动列表时(SCROLL_STATE_FLING),item中的图片或获取需要消耗资源的view,可以不显示出来;而处于其他两种状态(SCROLL_STATE_IDLE和SCROLL_STATE_TOUCH_SCROLL),则将那些view显示出来

3).复用convertView

在getItemView中,判断convertView是否为空,如果不为空,可复用。如果couvertview中的view需要添加listerner,代码一定要在if(convertView==null){}之外。

4)避免内存溢出

如果BaseAdapter的实体类有属性非常消耗内存,可以将保存到文件;为提高性能,可以进行缓存,并限制缓存大小。

5.对于一个安卓开发者来说,安卓开发中的提高安卓程序效率也是一项重要的内容,到底如何提高安卓程序效率,如何优化安卓的性能呢?以下本文就介绍了15种优化安卓的性能的小技巧,希望对广大的安卓开发者有所帮助!

6.保证Cursor占用的内存被及时的释放掉,而不是等待GC来处理。并且Android明显是倾向于编程者手动的将Cursorclose掉;

7.异步任务,分为核心任务和普通任务,只有核心任务中出现的系统级错误才会报错,异步任务的ui操作需要判断原activity是否处于激活状态;

8.使用代替强引用,弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存。对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用。

9.超级大胖子Bitmap及时的销毁(Activity的onDestroy时将bitmap回收,在被UI组件使用后马上进行回收会抛)设置一定的采样率(有开发者提供的图片无需进行采样,对于有用户上传或第三方的大小不可控图片,可进行采样减少图片所占的内存),从服务端返回图片,建议同时反馈图片的size巧妙的运用软引用drawable对应resid的资源,bitmap对应其他资源任何类型的图片,如果获取不到(例如文件不存在,或者读取文件时跑OutOfMemory异常),应该有对应的默认图片(默认图片放在在apk中,通过resid获取);

中ui组件需要用到的图片是apk包自带的,那么一律用或者,而不要根据resourceid

注意:get((),_achievement_normal)该方法通过resid转换为drawable,需要考虑回收的问题,如果drawable是对象私有对象,在对象销毁前是肯定不会释放内存的。

11.复用、回收Activity对象临时的activity及时finish主界面设置为singleTask一般界面设置为singleTop。

12.在onResume时设置该界面的电源管理,在onPause时取消设置。

13.应用开发中自定义View的时候,交互部分,千万不要写成线程不断刷新界面显示,而是根据事件主动触发界面的更新。

14.如果ImageView的图片是来自网络,进行异步加载。

15.位置信息获取用户的地理位置信息时,在需要获取数据的时候打开GPS,之后及时关闭掉。

安卓系统优化方法

目前智能手机市场两大系统分别是iOS和Android,并且已经形成了对立的阵营,Android用户并不理会iOS用户所谓的体验好应用好是怎么个好法,而iOS用户则更不理解Android用户刷机重启抠电池的乐趣。

在iOS用户眼中,Android的形象几乎可以用一个“卡”字来代替。

其实Android经过了这几年的发展,硬件水平已经有了很大的提高,再加上目前的优化,Android卡的情况已经有了很大程度的缓解,目前的双核机型硬件配置十分强大,如果还要说卡,也就是因为厂商定制ROM的优化原因。

其实Android的“卡”,可以得到彻底的解决,这就关系到了Android的优化问题,而今天我们就探讨下如何优化我们手中的Android机型。

在这里笔者也要提醒大家,选购Android机型一定要选择热门机型,只有热门机型才有足够丰富的优化资源供我们选择,切忌为了个性选择偏门机型,Android热门机型再是街机,也不会比iPhone还街吧?刷机重启抠电池刷机是Android用户的一大乐趣,部分用户刷机是为了得到更好的易用性,比如小米的MIUI ROM,非常符合中国人的使用习惯,也有着足够丰富的个性化设定,是图省事的朋友刷机的好选择,不过对于追求高性能的朋友来说,MIUI的优化还有很大提升空间,人们纷纷选择了对于ROM优化更加出色的CyanogenMod作为刷机的第一选择。

MIUI ROM特色CyanogenMod系列目前主打的ROM有CM 7.2和CM 9两个,CM 7.2基于Android 2.3.7,而CM 9则基于Android 4.0.4,其中CM 7.2已经基本成熟,完美支持的机型很多,是大部分机友刷机的第一选择,CM 9官方的ROM支持机型并不多,民间高手也都进行了各个机型的移植,官方支持的机型兼容性相当不错,而移植情况并不乐观。

CyanogenMod的LOGOCM系列ROM忠实于AOSP,在底层驱动方面做了很多努力,刷入之后就会感觉手机流畅了许多,同时也支持了更多的美化和手机自定义能力,比如我们可以对手机的震动回馈做细致的调整,包括按下震动的强度,抬起震动的强度等,让手机虚拟按键给我们更为真实的回馈,在CM ROM中,类似的设定非常多。

CM9 ROM截图目前大部分的ROM都是使用CM进行定制的,还有一部分是对官方原版ROM进行修改,仅有少部分的ROM是修改的AOSP的源码,这些ROM指向都是谷歌Nexus系列的机型,比如GALAXY Nexus和Nexus S上的Codename和AOKP,就针对源码做了很多修改,让手机变得更流畅。

刷内核效果很好仅仅刷手机的ROM是不够的,虽然多了很多自定义的功能,流畅度已经高于官方的ROM,但依旧有很大提升的空间,这时候我们就需要通过刷内核来进一步优化,刷内核所能带来的提升是相当明显的,但是对于刷内核大家还是要谨慎。

国外著名论坛的内核发布区刷内核相比刷ROM,是一个很小的工程,你的手机不必要Wipe,也就是说不用删除手机内部的数据,刷一下也就几分钟的功夫,所以刷内核的时候,大家完全可以多下几个内核,逐个进行测试,看看哪个内核更适合自己,就保留哪个内核。

同时刷内核时我们要注意,内核需对应自己的手机版本,对应自己所刷的ROM,否则会造成手机无法启动的现象,如果遇到无法启动的现象,再刷其他可用内核就可以恢复。

Android机器人大家会问了,说了这么半天,刷内核到底都有什么作用呢?首先就是超频,大部分内核会默认提供降压超频,并拥有多种超频策略,来保证超频的情况下更省电。

其次,还提供更多调整,比如内存虚拟机的大小,颜色管理等等,甚至一个内核可以包括一些新的Linux的补丁,比如最新的Linux 3.3所集成的CPU频率补丁等等。

刷内核工具事实上,一般的第三方ROM已经修改了手机的内核,达到了更流畅的目的,但ROM的制作速度远远比不上内核的调整速度,有时候一个ROM适用的内核在一天之内可能多次更新,所以我们可以尝试不同的新内核,看看他们的超频是不是能给我们带来性能上质的提升,是不是能更省电,是不是能通过颜色调整让我们看到更棒的画面等等。

精简内置应用我相信Android用户通过不断的更换ROM和刷内核已经在流畅度上有了质的飞跃了,如果这时候你的手机已经比iPhone更流畅、更省电,那么我们就可以收手了,如果你还不满意,我们还有其他的路可选,精简内置应用,就是一个可以大幅度提升流畅度的方法。

像Google的服务就是大部分人精简的对象。

跑分是性能的体现Android系统和iOS与Windows Phone不同,这个系统拥有真正的后台运行能力,虽然iOS在推送方面做得很好,弥补了后台方面的不足,但是仍然无法与Android的真后台相比,但是由于Android的程序优先级并不像iOS和Windows Phone那样,为了流畅让当前界面拥有最高优先级,所以我们就要把Android手机后台不必要的进程关掉,以获得最佳的性能。

RE管理器截图那么精简内部应用就是很好的选择,因为在我们使用过程中,有许多Android内部应用程序是不必要的,而这些程序会在我们不用的时候悄悄的后台打开,对我们的使用造成影响。

在精简时,我们需要用到root文件管理器,同时需要保证手机已经开启root权限。

RE管理器截图进入system/app就可以进行精简了,我们需要把root管理器的当前权限设置成读写,并且修改需要删除的软件权限,打开软件执行操作的权限,就可以对删除内置软件了,在精简前,大家需要对软件进行备份,或者备份整个ROM,如果你精简掉系统程序,可能会造成无法开机的情况,重刷ROM可以解决,所以大家最好找到该机型、该ROM的精简列表,以避免重复劳动。

还有其他优化经过以上多方面的优化,我相信大家都已经得到了一个较为干净、运行流畅的Android了,不过在很多程序中,我们还是会遇到卡顿的情况,对于一个极端追求流畅度的玩家来说,这样的情况是绝对不允许发生的,因为我们还有进一步优化的空间。

CM超频选项之前我们介绍了CM系列ROM,而CM的ROM中有两个选项的勾选可以进一步的提高流畅度,但是会损失一些画面这些选项是贴图差值抖动和16位透明度,贴图差值抖动这个选项需要关闭,这个选项关闭后可以提高流畅度,但是在滑动菜单时会有不容易被发现的画面损失,而16位透明度这个选项开启会大幅度提高流畅度,但是一些纯色的透明效果画质会下降,比如Android滑动到边缘的越界效果。

CM性能设置选项在Android 4.0的ROM中,也有不少选项可以提高程序的流畅度,比如程序的GPU加速,使用GPU对2D程序的界面进行渲染,有效减轻界面滑动对于CPU的负担,同时还能让界面得到更好地渲染效果,不过这个选项会让有些程序出现兼容性问题,而Android也不能单独为某个程序开关GPU加速,所以GPU加速这个功能让人又爱又恨。

Android 4.0强制GPU加速在提到刷内核时,我们也提到了超频内核,超频内核在刷完后,会在ROM设置中提供给你多种内核超频策略选择,在大部分机型中,超频不会增加CPU的耗电,因为厂商在CPU出厂前,为了保证CPU的稳定,为CPU设置了很安全的电压和频率,这显得过于保守,而在同等的电压下,CPU根据体质不同或多或少还有可以压榨的空间,所以我们在保证稳定运行的情况下,还可以继续对CPU进行超频。

优化策略总结本文我们从刷ROM开始提到了一些Android系统的优化,对于Android系统来说,流畅度是它相比其他系统最大的短板,其实Android的大部分手机有着相当好的硬件,所以流畅度大幅度提升完全不是难事,而各个厂商在Android手机出厂前给手机定制的ROM并没有达到最优的优化效果,或多或少都有可提升的空间。

三星 GALAXY Nexus所以我们也可以根据自己用手机的需要对手机进行彻头彻尾的优化,从ROM开始让手机变得彻底流畅起来,这里要跟大家嘱咐的,也是我们多次重申的一点:一定要选择普及率较高的Android机型,尤其是在国外的高普及度,像谷歌的Nexus系列手机被誉为亲儿子,也是因为它开放了源代码,在其他手机为第三方ROM挠头的时候,Nexus系列已经早早的开始各种优化了。

ClockworkMod的LOGO其次,除了ROM资源,我们也要考虑到其他资源,比如内核,各大手机厂商的热门机型,内核资源也是不一样的,早期摩托罗拉的里程碑很开放,所以有着大量可刷的内核,而到了后来摩托罗拉机型很封闭,可刷的内核资源就相当匮乏,虽然ROM很多,但刷来刷去都大同小异,刷机的乐趣锐减。

这里谷歌的Nexus系列再一次做了表率。

AOSP网页截图再加上一些精简和设置操作,你会发现,你的手机流畅度完全可以翻几番,即使是官方有新的升级你可能都懒得去理,因为你知道,官方的升级不可能带来刷机所给你的流畅度。

这也是iOS玩家所不理解的刷机重启扣电池的乐趣。

他们更不理解的是Android的流畅度怎么能超越iOS呢?如果您按照小编交给你的这些方法,安卓手机不会再出现卡壳的现象了。

Android性能优化第(八)篇—App启动速度优化之耗时检测处理

应用的启动速度缓慢这是很多开发者都遇到的一个问题,比如启动缓慢导致的黑屏,白屏问题,大部分的答案都是做一个透明的主题,或者是做一个Splash界面,但是这并没有从根本上解决这个问题。那么如何从根本上解决这个问题或者做到一定程度的缓解?

1、冷启动:当启动应用时,后台没有该应用的进程,这时系统会首先会创建一个新的进程分配给该应用,这种启动方式就是冷启动。

2、热启动:当启动应用时,后台已有该应用的进程,比如按下home键,这种在已有进程的情况下,这种启动会从已有的进程中来启动应用,这种启动方式叫热启动。

3、温启动 :当启动应用时,后台已有该应用的进程,但是启动的入口Activity被干掉了,比如按了back键,应用虽然退出了,但是该应用的进程是依然会保留在后台,这种启动方式叫温启动。

adb shell am start -W [PackageName]/[]

执行成功后将返回三个测量到的时间:

这里面涉及到三个时间,ThisTime、TotalTime 和 WaitTime。WaitTime 是 startActivityAndWait 这个方法的调用耗时,ThisTime 是指调用过程中最后一个 Activity 启动时间到这个 Activity 的 startActivityAndWait 调用结束。TotalTime 是指调用过程中第一个 Activity 的启动时间到最后一个 Activity 的 startActivityAndWait 结束。如果过程中只有一个 Activity ,则 TotalTime 等于 ThisTime。

总结:如果只关心某个应用自身启动耗时,参考TotalTime;如果关心系统启动应用耗时,参考WaitTime;如果关心应用有界面Activity启动耗时,参考ThisTime。

从我们Application开始到首页显示出来,这个过程,我们应该注意一些什么,将这个过程细分一下,会有下面的时间点需要注意。

Application的构造器方法——>attachBaseContext()——>onCreate()——>Activity的构造方法——>onCreate()——>配置主题中背景等属性——>onStart()——>onResume()——>测量、布局、绘制显示在界面上。

因为上面这些阶段全部都是在主线程中执行的,任何不经意的操作都可能拖慢应用的启动速度。所以我们不应在Application以及Activity的生命周期回调中做任何费时操作,具体指标大概是你在onCreate,onResume,onStart等回调中所花费的总时间最好不要超过400ms,否则用户在桌面点击你的应用图标后,将感觉到明显的卡顿。但是有些 不得以的任务 又必须在UI显示之前执行。所以我们要将 任务 划分优先级。

对于首页渲染完成后,开始加载,或者延迟加载,延迟加载的目的就是界面先显示出来,然后加载,但是你觉得要延迟多久呢?在 Android 的高端机型上,应用的启动是非常快的 , 这时候只需要 Delay 很短的时间就可以了, 但是在低端机型上,应用的启动就没有那么快了,而且现在应用为了兼容旧的机型,往往需要 Delay 较长的时间,这样带来体验上的差异是很明显的。延迟加载有一种方式。

极力推荐用第二种,在窗口完成以后进行加载,这里面的run方法是在onResume之后运行的。关于这种懒加载机制,参考 Android应用启动优化:一种DelayLoad的实现和原理(上篇) ,给出了详细的解释。

通过上面我们知道一种懒加载机制,所以我们可以将Application中和首页的onCreate中的有些耗时任务,放到首页渲染完毕后加载。如何找出这些耗时任务,TraceView就派上用场了,TraceView的用法,移步我的前面的博客 Android性能优化第(六)篇—TraceView 分析图怎么看?

比如在首页的onCreate中我们进行了用户启动上报,这个进行懒加载是不是分分钟减少139毫秒呢?

在比如在Application里面用到了GSON,将String转化成json,我将这个移动到懒加载里面,是不是又减少了100毫秒呢?

在比如,有些Application中做了支付SDK的初始化,用户又不会一打开App就要支付,放在Application中加载干嘛?

此处我们这里举得例子是优化了139毫秒和100毫秒的,其实真正耗时的任务有的有1秒多,都被我优化完了,所以trace图中看不到了,就举个了这两个例子,还有SharedPreferences也是耗时大户,经过检测保存一个boolean变量耗时120+毫秒以上。

利用TraceView可以清楚我们每一个方法的耗时时间,极大的帮助了我们做优化工作。

五、优化思路总结 1、UI渲染优化,去除重复绘制,减少UI重复绘制时间,打开设置中的GPU过度绘制开关,各界面过度绘制不应超过2.5x;也就是打开此调试开关后,界面整体呈现浅色,特别复杂的界面,红色区域也不应该超过全屏幕的四分之一; 2、根据优先级的划分,KoMobileApplication的一些初始化工作能否将任务优先级划分成3,在首页渲染完成后进行加载,比如:PaySDKManager。 3、主线程中的所有SharedPreference能否在非UI线程中进行,SharedPreferences的apply函数需要注意,因为Commit函数会阻塞IO,这个函数虽然执行很快,但是系统会有另外一个线程来负责写操作,当apply频率高的时候,该线程就会比较占用CPU资源。类似的还有统计埋点等,在主线程埋点但异步线程提交,频率高的情况也会出现这样的问题。 4、检查BaseActivity,不恰当的操作会影响所有子Activity的启动。 5、对于首次启动的黑屏问题,对于“黑屏”是否可以设计一个.9图片替换掉,间接减少用户等待时间。 6、对于网络错误界面,友好提示界面,使用ViewStub的方式,减少UI一次性绘制的压力。 7、任务优先级为2,3的,通过下面这种方式进行懒加载的方式

8、Multidex的使用,也是拖慢启动速度的元凶,必须要做优化。后面有空专门写一篇Multidex。

相关链接:

Android应用启动优化:一种DelayLoad的实现和原理(上篇)

Android性能优化之加快应用启动速度

手机淘宝性能优化全记录

Android客户端性能优化(魅族资深工程师毫无保留奉献)

Please accept mybestwishes for your happiness and success !

安卓系统开发平台需要改进的有哪些?

在系统运行的稳定性上需要进一步加强,因为这极大的影响到产品的使用价值以及产品的体验感,另外在安卓的内部运行上,这导致速度慢于iOS系统。

论述android系统开发平台需要改进性能问题在系统的分类上,性能优化原则和方法,借助性能优化工具分析解决问题。安卓与IOS系统比起来,我们都知道安卓手机的弊端是在后台偷偷的运行程序,非常占内存也非常耗电,那么,肯定有人会问现在的华为手机有没有这种现象,答案是肯定的有的,因为华为搭载的操作系统也是在安卓系统上面进行修改完善的。

至于苹果手机就没有后台运行的程序,其归根结底还是归根于安卓系统与苹果系统的底层架构不同而导致的。

比如我们的安卓手机在打开很多个应用的时候,我们的程序都是跑在安卓虚拟机钟,每个程序会开一个线程或者是多个线程。

这样一来的话,我们关闭程序的话有可能关不掉其中的线程,所以这些程序都会耗电或者占据内存。

其次定期清理手机,通过手机管家查看偷偷运行的程序,并且停止这些程序,手机定期杀毒以及清理不用的文件等。

比如用华为的手机管家,可以找到手机管家—再找到启动管理—-然后再去根据自己的需要进行设置都是可以关闭掉这些后台程序的。

如何提升Android应用的性能

第一个要点:首先要有良好的编程习惯要成为一名优秀的资源管理员;既要运用常识,还要使用公认的算法和标准的设计模式。

在资源使用方面,如果你打开了资源,要记得关闭资源。

要尽量晚地获取,尽量早地释放。

这些由来已久的编程准则同样适用于你的Android应用程序,如果它们使用底层的设备服务,更是如此。

第二个要点:让阻塞操作远离主用户界面线程想确保你的应用程序运行起来很灵活,就要使用AsyncTask、线程、IntentService或自定义后台服务来处理脏活。

应使用装入器来简化装入时间长的数据(如游标)的状态管理。

你无法容忍你的应用程序在某个操作正在处理的时候出现滞后或停顿。

第三个要点:使用最新的Android软件开发工具包(SDK)版本、应用编程接口(API)和最佳实践确保你开发的应用程序是最新的,因而要使用Android平台提供的最新工具。

随着Android平台不断发展,它也在不断改进。

一些功能 可能已被弃用,或者换成了更好的功能。

核心API得到了修正版(bug fix)和性能改进。

已经引入了装入器等新的API,帮助开发者编写出运行更稳定、响应更迅即的应用程序。

第四个要点:考虑使用限制模式(Strict Mode)你可以使用名为限制模式(StrictMode)的AndroidAPI,帮助你查明哪里违反了几个良好的编程习惯。

StrictMode 会帮助你确认你的应用程序是不是存在内存泄漏,并且检测你的应用程序是不是在试图执行长时间的阻塞操作,这些操作应该被卸载到线程或别的渠道。

Android2.3里面引入StrictMode类()。

第五个要点:在发布应用程序之前,禁用或尽量少用调试和诊断如果你的Android应用程序开发起来需要一些时间,你可能已将一些日志和调试代码嵌入到了应用程序中。

写入到日志及其他此类输出系统给性能带来了影响。

确保在发布应用程序之前,尽量少用或完全禁用这些功能。

第六个要点:确保你设计的布局简单、简练和浅层简单的屏幕有助于阅读起来最轻松,而简单的布局装入起来最快速。

你不应该过于深层地嵌套你的布局,或者用不必要的过多视图(View)控件 塞满屏幕。

花些时间来开发用户可以高效使用的简练用户界面,而不是试图把太多功能塞入到单单一个屏幕上。

这不但有助于提升应用程序的性能,还有助于让你的 应用程序对用户来说更高效。

第七个要点:让你应用程序的资源适合目标设备添加适合特定设备配置的资源,那样它们就能尽可能高效地装入。

我们在谈论图形资源时,这点尤为重要。

如果你添加了可利用的庞大图像资源,需要装入和调整大小,就无法有效地使用其他的应用程序资源。

第八个要点:使用Hierarchy Viewer工具Hierarchy Viewer工具可以帮助你调试你的应用程序布局。

它还提供了宝贵的分析信息,以便了解布局里面的每一个视图控件测量、渲染和绘制要花多少时间。

只有准确找到了问题的根源,问题解决起来才容易。

第九个要点:使用layoutopt工具Layoutopt工具是一款简单的命令行工具,它可以帮助你找到不必要的控件嵌套以及缩减布局资源的其他方法,以便尽量减少资源的使用。

它让你可以了解哪些布局控件可能是多余的或不必要的。

控件越少、布局层次越浅,性能就越好。

Android性能优化总结

常用的Android性能优化方法:一、布局优化: 1)尽量减少布局文件的层级。

层级少了,绘制的工作量也就少了,性能自然提高。

2)布局重用 <include标签> 3)按需加载:使用ViewStub,它继承自View,一种轻量级控件,本身不参与任何的布局和绘制过程。

他的layout参数里添加一个替换的布局文件,当它通过setVisibility或者inflate方法加载后,它就会被内部布局替换掉。

二、绘制优化: 基于onDraw会被调用多次,该方法内要避免两类操作: 1)创建新的局部对象,导致大量垃圾对象的产生,从而导致频繁的gc,降低程序的执行效率。

2)不要做耗时操作,抢CPU时间片,造成绘制很卡不流畅。

三、内存泄漏优化: 1)静态变量导致内存泄漏比较明显 2)单例模式导致的内存泄漏单例无法被垃圾回收,它持有的任何对象的引用都会导致该对象不会被gc。

3)属性动画导致内存泄漏 无限循环动画,在activity中播放,但是onDestroy时没有停止的话,动画会一直播放下去,view被动画持有,activity又被view持有,导致activity无法被回收。

四、响应速度优化: 1)避免在主线程做耗时操作 包括四大组件,因为四大组件都是运行在主线程的。

2)把一些创建大量对象等的初始化工作放在页面回到前台之后,而不应该放到创建的时候。

五、ListView的优化: 1)使用convertView,走listView子View回收的一套:RecycleBin 机制 主要是维护了两个数组,一个是mActiveViews,当前可见的view,一个是mScrapViews,当前不可见的view。

当触摸ListView并向上滑动时,ListView上部的一些OnScreen的View位置上移,并移除了ListView的屏幕范围,此时这些OnScreen的View就变得不可见了,不可见的View叫做OffScreen的View,即这些View已经不在屏幕可见范围内了,也可以叫做ScrapView,Scrap表示废弃的意思,ScrapView的意思是这些OffScreen的View不再处于可以交互的Active状态了。

ListView会把那些ScrapView(即OffScreen的View)删除,这样就不用绘制这些本来就不可见的View了,同时,ListView会把这些删除的ScrapView放入到RecycleBin中存起来,就像把暂时无用的资源放到回收站一样。

当ListView的底部需要显示新的View的时候,会从RecycleBin中取出一个ScrapView,将其作为convertView参数传递给Adapter的getView方法,从而达到View复用的目的,这样就不必在Adapter的getView方法中执行()方法了。

RecycleBin中有两个重要的View数组,分别是mActiveViews和mScrapViews。

这两个数组中所存储的View都是用来复用的,只不过mActiveViews中存储的是OnScreen的View,这些View很有可能被直接复用;而mScrapViews中存储的是OffScreen的View,这些View主要是用来间接复用的。

2)使用ViewHolder避免重复地findViewById 3)快速滑动不适合做大量异步任务,结合滑动监听,等滑动结束之后加载当前显示在屏幕范围的内容。

4)getView中避免做耗时操作,主要针对图片:ImageLoader来处理(原理:三级缓存) 5)对于一个列表,如果刷新数据只是某一个item的数据,可以使用局部刷新,在列表数据量比较大的情况下,节省不少性能开销。

六、Bitmap优化: 1)减少内存开支:图片过大,超过控件需要的大小的情况下,不要直接加载原图,而是对图片进行尺寸压缩,方式是 采样,inSampleSize 转成需要的尺寸的图片。

2)减少流量开销:对图片进行质量压缩,再上传服务器。

图片有三种存在形式:硬盘上时是file,网络传输时是stream,内存中是stream或bitmap,所谓的质量压缩,它其实只能实现对file的影响,你可以把一个file转成bitmap再转成file,或者直接将一个bitmap转成file时,这个最终的file是被压缩过的,但是中间的bitmap并没有被压缩。

(,100,bos);七、线程优化: 使用线程池。

为什么要用线程池? 1、从“为每个任务分配一个线程”转换到“在线程池中执行任务” 2、通过重用现有的线程而不是创建新线程,可以处理多个请求在创建销毁过程中产生的巨大开销 3、当使用线程池时,在请求到来时间 ,不用等待系统重新创建新的线程,而是直接复用线程池中的线程,这样可以提高响应性。

4、通过和适当调整线程池的大小 ,可以创建足够多的线程以使处理器能够保持忙碌状态,同时还可以防止过多线程相互竞争资源而使应用程序耗尽内存或者失败。

5、一个App里面所有的任务都放在线程池中执行后,可以统一管理 ,当应用退出时,可以把程序中所有的线程统一关闭,避免了内存和CPU的消耗。

6、如果这个任务是一个循环调度任务,你则必须在这个界面onDetach方法把这个任务给cancel掉,如果是一个普通任务则可cancel,可不cancel,但是最好cancel 7、整个APP的总开关会在应用退出的时间把整个线程池全部关闭。

八、一些性能优化建议: 1)避免创建过多对象,造成频繁的gc 2)不要过多使用枚举,枚举占用的空间比整型大很多 3)字符串的拼接使用StringBuffer、StringBuilder来替代直接使用String,因为使用String会创建多个String对象,参考第一条。

4)适当使用软引用,(弱引用就不太推荐了) 5)使用内存缓存和磁盘缓存。

文章版权声明

 1 原创文章作者:汇维网,如若转载,请注明出处: https://www.52hwl.com/109553.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年2月19日 上午12:36
下一篇 2024年2月19日 上午12:39