app里面什么占用app内存占用测试最大

清理运行内存app_怎么清理运行内存_清理运行内存软件_清理运行内存app大全
系统不能回收足够的运行内存, 系统会清除所有缓存应用并且会把正在活动的应用暂缓,这就造成了手机卡顿的原因,小编为大家整理了清理运行内存app合集,希望对大家有所帮助。
安全先锋是一款强力的手机杀毒软件,杀毒能力堪称手机卡巴斯基,经测评,杀毒能力在手机杀毒安全软件里位列前茅。由于安全先锋的官...
《极速清理》软件特色 【启动慢?一键加速】只需一次点击,打开app就像火箭加速一样快 【没内存?一键清理】只需一次点击,...
APK一键清理是一款手机apk文件安装包卸载工具。是删除apk安装包,不是卸载软件哦!每次下载应用游戏后安装包都保存在手...
Just Cleaner是来自国外的一款清理应用,试用了一下,确实扫描出了垃圾,点击应用管理就直接给我黑屏了,只能说一般吧。
《安卓任务杀手》是一款实用的手机后台管理软件,让你更好地进行清理服务,清理手机运行中的垃圾,帮助你的手机恢复流畅,享受快捷...
APK一键清理是一款手机apk文件安装包卸载工具。是删除apk安装包,不是卸载软件哦!每次下载应用游戏后安装包都保存在手...
骑士手机助手是一款卓手机管理软件,骑士手机助手提供了海量的手机应用软件,此外还支持手机垃圾清理,使您轻松地管理你的手机。骑...
最使用最高效最美观大方的一键清理手机加速软件,让手机优化到差不多出厂设置时一样迅速. 手机不再卡顿!一键清楚缓存垃圾,拥...
《一键快速清理》能够帮助安卓的小伙伴们快速的整理清理自己的手机,更好的提高手机的流畅度,喜欢的小伙伴们赶紧来易玩网下载吧!
《蓝蛙安全》是一款实用的手机安全优化软件,帮助你轻松地进行线上清理,简单的获取丰富的支付功能,轻松地进行手机优化处理,提升...
《快捷清缓存》一款专门为安卓手机的小伙伴们准备的清缓存软件,能够帮助小伙伴们更好的清理手机的缓存文件,喜欢的小伙伴们赶紧来...
《手机流氓软件清理大师》是一款强大的手机流氓软件清理工具,轻松地帮助你提升自己的手机使用效率,快速降低手机电耗,让手机更流...
Naver管家安卓版app是一款帮助您优化手机系统,清理垃圾的软件手机越来越慢是不是很叫人苦恼?使用Naver管家就可以又...
《Power Clean》软件简介 Power Clean的亮点应该就在于够轻量级,功能上现在这种类型的工具都差不多了。 ...
SD卡清理介绍SD卡清理工具是一款手机设计的清理软件,非常实用,一目了然的分类出SD卡里文件,根据需要将垃圾文件清理掉,给...
MEM清理大师手机版是一款工具类手机软件,它可以快速的清理手机里的垃圾和缓存,结束不需要的后台进程,给手机减压,让你极速上...
安卓的内存总是不够用,常常是正在拍照突然提示内存不足,是不是很扫兴? 强力内存清理工具提供手机存储的傻瓜式管理。 而且它...
《白胖子清理助手》是一款专业的手机清理工具,有了它,你可以获得便捷手机清理功能,一键轻松搞定,帮助你的手机进行瘦身,不做大...
《急速清理》是一款强大的手机垃圾清理工具,有了它,你可以获得快速的手机内存清扫,帮助你的手机瘦身,让手机使用更加流畅,还等...
《华为文件管理器》是一款华为出品的实用文件管理工具,有了它,你可以快速进行手机文件管理,轻松整理自己的内存和文档,还等什么...
《360 Security Lite》针对内存比较小的手机用户算是一个福音了,可以极限了清理内存, 《360 Securi...
《一键优化特别版》是一款实用有效的手机清理软件,让你快捷的进行流畅的网络连接,享受便捷的手机文件清理,让你的手机恢复流畅如...
《蓝盾安全卫士》是一款实用的手机管家服务软件,让你更好地获得实用的手机文件清理功能,优化自己的书籍内存,快捷的进行文件管理...
《萌妹清内存》是一款福利向的日常应用,帮助你快捷的进行手机内存清理,桌面为你添加一只萌妹子,无论你是想掀裙子,还是想扯内裤...
《回收站》是一款专业的手机回收管理服务,让你更好地进行掌上回收删除,便捷的进行桌面清理,便捷的实现手机管理,想删什么就删什...
《猎豹清理大师精简版》让小伙伴们能够更好的保护自己的手机安全,深度清理小伙伴们手机里面的内存,喜欢的小伙伴们赶紧来易玩网下载吧!
《手机广告杀手》是一款实用的手机广告拦截软件,帮助你更好的进行掌上设置,享受畅通无忧的手机使用,更好的进行广告拦截,提升使...
《CM Security Lite》是一款强大的手机杀毒软件,帮助你的手机快捷的进行清理,便捷的获取实用的掌上服务,更好的...
《清理加速神器》一款非常不错的手机清理应用,让小伙伴们在也不用担心手机卡顿,垃圾过多等等,喜欢的小伙伴们赶紧来易玩网下载吧!
《CleanMaster》是一款强大的手机内存清理软件,帮助你快捷的清除无用的缓存垃圾和软件残留,让你快捷的获取更大的手机...
《光速大师》一款能够通过这款手机客户端一键提高网速的软件应用,让你能够享受更快的网络。各种网络型号大幅度提高,喜欢的小伙伴...
《猎豹清理大师》是安卓手机用户的装机必备的应用。它提供了清理安卓手机上的应用缓存、残余程序文件、以及清理历史痕迹和应用程序...
联通手机卫士是由江苏联通推出的一款针对所有手机用户免费使用的安防软件。该软件集防电话骚扰和拦截短信、号码云、软件权限管理、...
史上最简卸载工具,全屏列表显示应用,快速定位所要卸载软件,支持单个和批量卸载,非常简洁、实用。实时显示内存使用情况,掌握手...
一款简洁实用的手机清理软件。 1.高效、准确、快速清理你手机的缓存垃圾,提升手机运行速度,远离卡慢! 2.一键操作,轻轻...
★加快您的手机与手机优化!★爱清理是一个免费的Andr??oid应用程序,可以帮助清除多余的应用程序和备份重要的,释放您...
《安全桌面》是一款实用的安卓清理桌面软件,带给你更加流畅的操作体验和便捷的简单操作风格,让你获得干净的手机空间,还等什么?...
《Root Spy文件管理器》软件简介 Root Spy文件管理器虽然名字听起来不是很可靠,但是实际上是个还挺不错的新出现...
清理垃圾?清理缓存?清理内存?管理应用?一切都可以交给UC优化大师,小巧却强大的UC优化大师可以全面优化您的手机,安全地...
强力清理是一款工具类手机软件,它可以快速删除系统中不必要的文件和应用程序以及后台不必要的程序进程,还能删除一些残留垃圾,释...
《长虹文件管家》软件简介 长虹文件管家是一款精致小巧的文件管理软件。 《长虹文件管家》软件特色 1. 界面简洁,操作...
在日常使用手机的过程中有可能碰上误删文件或者照片的问题,当误删后怎么找回误删的内容呢?恢复删除文件安卓手机版是一款误删恢复...
强力清理汉化版 Power Clean是一款清理工具,提供了垃圾清理、内存释放、应用管理器和设备信息查看功能。
我们手机经常出现内存告急的状况,导致应用无法安装,或者应用强制退出,或者屡屡弹出警告,一键清理大师应运而生。它能让你一键...
《超级清理》是一款实用的系统清理工具,有了它,你可以快速的清理你的系统,还在为系统运存占用太多,空间不足,手机卡等诸多烦恼...
《超级清理大师》一款专门针对安卓手机的小伙伴们准备的杀毒清理软件应用,能够更加快速,高速的清理自己的手机内存,防护自己的手...
《ShutApp》是一款强大的深度清理软件,帮助你快捷的进行内存清理,享受流畅的手机操作功能,真正做到深度清理,让你的手机...
《内存卡清理大师》一款专门为安卓手机用户准备的内存清理软件,让你再也不用担心手机内存不足而烦恼,喜欢的小伙伴们赶紧来易玩网...
《超级管家》是一款强大的掌上移动安全管理软件,轻松的帮助你实现系统服务,轻松的进行在线清理,简单的实现手机瘦身,提升手机使...
《清理加速器》一款专门为安卓手机用户准备的加速软件应用,让小伙伴们能够更好的清理自己的手机,喜欢的小伙伴们赶紧来易玩网下载...
安卓的内存总是不够用,常常是正在拍照突然提示内存不足,是不是很扫兴? 强力内存清理工具提供手机存储的傻瓜式管理。 而且它...
《简约清理》软件简介 简约清理Minimal Cleaner特点就是很简单,简单得不知道它究竟清理了什么。 《简约清理》软...
是不是觉得你的手机越来越慢了?那是因为你没及时关闭不再使用的程序。因此导致浪费了一部分内存空间,现在内存清理大师。帮你一...
《ccleaner汉化版》是一款安卓垃圾清理软件,歪果仁制作的软件就是小而简洁,让你体验最快速简单的手机清扫,垃圾再也不存...
《RAM Manager Pro》是一款内存优化软件,有了它,快送清理你的手机运存,让你的软件运行更加流畅,体验不卡的运行...
《海卓手机加速器》是一款实用的任务管理软件,关掉你的后台任务,清扫你的手机空间,帮助你的手机进行瘦身,给你更流畅的使用体验...
《卓大师一键清理》是一款实用的手机清理助手,帮助你快捷的进行手机清理,让你快速的进行手机优化,你的地盘听你的,还等什么?快...
《ASTRO文件管理器》是一款强大的手机文件管理软件,有了它,你可以快速的进行手机文件管理,找到你想找的的东西,还你手机一...
《禁止唤醒》是一款实用的手机清理软件,有了它,你可以获得实用的手机清理工具,帮助你快捷的进行手机减压,让你的手机不再卡住,...
《卸载专家》是一款实用的专业卸载软件,有了它,你可以获得快捷的软件卸载工具,帮助你快速的进行软件卸载,清扫手机空间,还等什...
《手机优化大师》是一款完全免费的手机垃圾清理工具,一键清理将简单做到极致,为您系统优化,内存清理,垃圾清理,关闭多余进程、...
《360清理大师》(360 Clean Droid)一直用的都是猎豹清理大师,对于360清理大师手机版并不是非常的看好,自...
款简单的CPU超频/降频工具,需要root权限。软件最大的特色就是界面质朴简洁,功能使用简便。
《简便缓存清理》是一款实用的手机清理软件服务,帮助你更好的进行手机管家服务,快捷的进行系统优化,享受流畅服务,还等什么?快...
《垃圾清理器电脑版》是一款实用便捷小巧的手机清理优化软件,帮助快捷的进行深度的电脑内部清理,更好的进行系统优化,享受流畅的...
《快切》是一款实用的应用整理内存软件,帮助你快捷的进行手机切换滑动,让你更好地享受快捷的手机优化加速清理服务,给你流畅的享...
《SD卡高级清理》一款非常不错的内存清理工具,还在为自己的手机内存不够用吗?莫名其妙就没内存了吗?喜欢的小伙伴们赶紧来易玩...
《梆梆优化》是一款强大的手机优化工具,帮助你更好的进行垃圾清理,快捷的快捷的清除隐藏垃圾,提升手机的流畅度,降低被病毒攻击...
专门针对安卓手机的软件应用的小伙伴们准备的,让小伙伴们能够更加快速的清理自己的手机内存,喜欢的小伙伴们赶紧来易玩网下载吧!
《內存加速器》一款能够更好的清理自己的手机内存,让手机不用在为手机内存不足而烦恼,喜欢的小伙伴们赶紧来易玩网下载吧!
《AVG内存缓存清理AVGCleaner》一款专门为安卓手机的小伙伴们准备的软件应用,让你能够更好的清理自己的手机,更好的...
猎豹一键清理大师下载app手机版是一款手机内存垃圾清理软件,帮助用户轻松一键清理手机应用产生的垃圾,让手机使用更方便,浏览...
《360 security》是一款实用强大的安全服务软件,轻松地提升自己的生活质量,快捷的进行隐私保护,提升自己的手机运行...
《微信删除僵尸粉》一款功能非常全面的微信删除僵尸粉的软件,让小伙伴们能够让自己的微信全是活跃粉丝哦!喜欢的小伙伴们赶紧来易...
《海豚手机清理助手》一款专门为安卓系统的小伙伴们准备手机清理软件,更好的帮助小伙伴们解决内存不足的问题,喜欢的小伙伴们赶紧...
《电量优化大师》是一款非常好用的手机电池优化软件,这款软件能够让手机电池的耗电量进行最大程度上面的优化,从而能够增长手机电...
《极加速》强迫症患者必须每天清理加速手机,极加速就正好适合你,不root也能管理内置软件。包体占用与资源消耗最小的加速类工...
极速清理专家:一款手机垃圾清理软件,可以随时监控手机CPU、RAM和内存使用率智能清理,瞬间让你的手机运行速度起飞。
App缓存清理能够快速清理应用程序中的缓存文件。一键清除所有缓存文件,释放更多可利用的内存空间。对于存在内存管理问题的手机...
《小绿点》是一款简单便捷的手机清理工具,有了它,你可以快速的进行手机清理,减缓运存压力,清除手机垃圾,还等什么?快来易玩网...
安卓优化清理大师集垃圾清理和手机优化两大核心功能于一身,为您的爱机提供实时的安全保护 一键清理:彻底清理系统垃圾、进程、...
《平板优化》是一款实用的平板优化工具,你可以获得实用的优化功能,让你快速的实现内存清理和文件瘦身,你的地盘听你的,还等什么...
《WRIKE平板优化》是一款专为平板服务的优化工具,有了它,可以快捷的帮助你的平板进行运行清理,活得更干净简洁的运行空间,...
河道清理与保洁公司平台包含全国各地街道、河道垃圾清理项目等,以及全国保洁行业所持有的清洁服务项目,是一个全面以及便捷的清...
照片清理大师是一款运行在安卓平台上的专为用户清理手机相册照片的软件,让让手机空间大一点,再大一点快来下载吧.
《安卓加速》是一款专业的手机清理加速软件,让你快捷的进行手机文件管理快捷的清理手机垃圾,获得手机加速功能,提升手机流畅度,...
一款专门为理工大学学生专门的教学校园平台,更加的方便在校园里面学习,查询成绩, 英语4级6级考试,还有各种校园的资讯和风光...
《自动清除内存》还是一款非常不错的清理内存,让小伙伴们能够更好的使用手机,让小伙伴们的手机更加流畅哦!喜欢的小伙伴们值得试试哦!
一键清理可以一键清理您的手机,删除你的足迹,清理垃圾。 【产品功能】 1、应用程序缓存; 2、通话记录/呼叫记录; 3、...
《垃圾清理器》是一款实用便捷小巧的手机清理优化软件,帮助快捷的进行深度的手机内部清理,更好的进行系统优化,享受流畅的服务,...
《一键清理专家》是一款实用的手机清理服务软件,让你快捷的进行手机垃圾清除和清扫,简单实用的进行手机内存管理,帮助你的手机进...
  壹回收app是一款系统优化工具。壹回收app专注于清理系统垃圾,针对广大安卓用户使用一段时间后系统卡顿做优化,清理大量...
一键清理加速是一款清理优化工具, 可以分析和清理app的缓存,从而让系统运行更加流畅。最大的特点应该说界面了,漂亮,动画...
有的应用(例如Google 相册)不能在通过外部打开方式,例如截图提醒中删除图片。 这个简单的小应用可以在分享菜单中增加...
简介:上亿用户一致推荐使用手机清理助手,高效、快速、准确的清理手机垃圾,提升手机运行速度。1、体积轻巧软件安装包极限控制在...
简介:一款功能强大,体积小巧的清理软件软件扫描功能强大,可以清除各种冗余文件及数据并且可以检测电池充放电以及提示包括温度提示
哈勃app,保护手机安全,远离病毒木马危害!现在的智能手机功能越来越便利的同时,危害也更容易乘虚而入,虽然用户有一定的防范...
星粉乐园简介为何手机越来越卡,电池续航能力越来越短?会玩手机,更要懂得如何保养你的手机!各种手机使用技巧,不懂你就OUT了!
安卓清理大师是一款集结深度清理手机垃圾,强力卸载内置软件兼病毒查杀功能的强大工具。凭借其出色的功能俘获了大批用户,长期处于...
一键清理手机版软件简介一键清理正是一款为您提供手机专业清理的好软件,是全球百万用户的装机必备之选,应用市场名列前茅的优质软...Android APP内存优化之图片优化 - 简书
下载简书移动应用
写了73091字,被1196人关注,获得了1968个喜欢
Android APP内存优化之图片优化
网上有很多大拿分享的关于Android性能优化的文章,主要是通过各种工具分析,使用合理的技巧优化APP的体验,提升APP的流畅度,但关于内存优化的文章很少有看到。在Android设备内存动不动就上G的情况下,的确没有必要去太在意APP对Android系统内存的消耗,但在实际工作中我做的是教育类的小学APP,APP中的按钮、背景、动画变换基本上全是图片,在2K屏上(分辨率)一张背景图片就会占用内存12M,来回切换几次内存占用就会增涨到上百兆,为了在不影响APP的视觉效果的前提下,有必要通过各种手段来降低APP对内存的消耗,下面是我在实践过程中使用的一些方法,很多都是不太成熟的项目,也不够深入,只是将其作为一种处理方式分享给大家。
通过DDMS的APP内存占用查看工具分析发现,APP中占用内存最多的是图片,每个Activity中图片占用内存占大半,本文重点分享对图片的内存优化。
不要将Button的背景设置为selector
在布局文件和代码中,都可以为Button设置background为selector,这样方便实现按钮的正反选效果,但实际跟踪发现,如果是将Button的背景设置为selector,在初始化Button的时候会将正反选图片都加载在内存中(具体可以查看Android源码,在类Drawable.java的createFromXmlInner方法中对图片进行解析,最终调用Drawable的inflate方法),相当于一个按钮占用了两张相同大小图片所使用的内存,如果一个界面上按钮很多或者是按钮很大,光是按钮占用的内存就会很大,可以通过在布局文件中给按钮只设置正常状态下的背景图片,然后在代码中监听按钮的点击状态,当按下按钮时为按钮设置反选效果的图片,抬起时重新设置为正常状态下的背景,具体实现方式如下:
public class ImageButtonClickUtils {
private ImageButtonClickUtils(){
* 设置按钮的正反选效果
public static void setClickState(View view, final int normalResId, final int pressResId){
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:{
v.setBackgroundResource(pressResId);
case MotionEvent.ACTION_MOVE:{
v.setBackgroundResource(pressResId);
case MotionEvent.ACTION_UP:{
v.setBackgroundResource(normalResId);
// 为了不影响监听按钮的onClick回调,返回值应为false
通过上面这种方式就可以解决同一个按钮占用两倍内存的问题,如果你觉得为一个按钮提供正反选两张图片会导致APK的体积变大,可以通过如下方式实现按钮点击的反选效果,这种方式既不会存在Button占用两倍内存的情况,又减小了APK的体积(Android 5.0中的tintColor也可以实现类似的效果):
ImageButton personalInfoBtn = (ImageButton)findViewById(R.id.personalBtnId);
personalInfoBtn.setOnTouchListener(new OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if(action == MotionEvent.ACTION_DOWN){
((ImageButton)v).setColorFilter(getResources().getColor(0X));
}else if(action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL){
((ImageButton)v).clearColorFilter();
// 为了不影响监听按钮的onClick回调,返回值应为false
将背景图片放在非UI线程绘制,提升APP的效率
在高分辨率的平板设备上,绘制大背景的图片会影响程序的运行效率,严重情况下就和没有开硬件加速的时候使用手写功能一样,相当地卡,最后我们的解决方案是将背景图片通过SurfaceView来绘制,这样相当于是在非UI线程绘制,不会影响到UI线程做其它事情:
import android.content.C
import android.content.res.TypedA
import android.graphics.B
import android.graphics.BitmapF
import android.graphics.C
import android.graphics.M
import android.graphics.PixelF
import android.util.AttributeS
import android.util.DisplayM
import android.view.SurfaceH
import android.view.SurfaceV
import com.eebbk.hanziLearning.activity.R;
public class RootSurfaceView extends SurfaceView implements SurfaceHolder.Callback, Runnable{
private float mViewWidth = 0;
private float mViewHeight = 0;
private int mResourceId = 0;
private Context mContext =
private volatile boolean isRunning =
private SurfaceHolder mSurfaceHolder =
public RootSurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initRootSurfaceView(context, attrs, defStyleAttr, 0);
public RootSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
initRootSurfaceView(context, attrs, 0, 0);
private void initRootSurfaceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes){
mContext =
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RootSurfaceView, defStyleAttr, defStyleRes);
int n = a.getIndexCount();
mViewWidth = displayMetrics.widthP
mViewHeight = displayMetrics.heightP
for(int index=0; index&n; index++){
int attr = a.getIndex(index);
switch(attr){
case R.styleable.RootSurfaceView_background:{
mResourceId = a.getResourceId(attr, 0);
case R.styleable.RootSurfaceView_view_width:{
mViewWidth = a.getDimension(attr, displayMetrics.widthPixels);
case R.styleable.RootSurfaceView_view_height:{
mViewHeight = a.getDimension(attr, displayMetrics.heightPixels);
a.recycle();
mSurfaceHolder = getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setFormat(PixelFormat.TRANSLUCENT);
private Bitmap getDrawBitmap(Context context, float width, float height) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), mResourceId);
Bitmap resultBitmap = zoomImage(bitmap, width, height);
return resultB
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
System.out.println("RootSurfaceView surfaceChanged");
public void surfaceCreated(SurfaceHolder holder) {
drawBackGround(holder);
System.out.println("RootSurfaceView surfaceCreated");
public void surfaceDestroyed(SurfaceHolder holder) {
isRunning =
System.out.println("RootSurfaceView surfaceDestroyed");
protected void onAttachedToWindow() {
super.onAttachedToWindow();
System.out.println("RootSurfaceView onAttachedToWindow");
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
System.out.println("RootSurfaceView onDetachedFromWindow");
public void run(){
while(isRunning){
synchronized (mSurfaceHolder) {
if(!mSurfaceHolder.getSurface().isValid()){
drawBackGround(mSurfaceHolder);
isRunning =
private void drawBackGround(SurfaceHolder holder) {
Canvas canvas = holder.lockCanvas();
Bitmap bitmap = getDrawBitmap(mContext, mViewWidth, mViewHeight);
canvas.drawBitmap(bitmap, 0, 0, null);
bitmap.recycle();
holder.unlockCanvasAndPost(canvas);
public static Bitmap zoomImage( Bitmap bgimage , float newWidth , float newHeight ) {
float width = bgimage.getWidth( );
float height = bgimage.getHeight( );
Matrix matrix = new Matrix();
float scaleWidth = newWidth/
float scaleHeight = newHeight/
matrix.postScale( scaleWidth, scaleHeight );
Bitmap bitmap = Bitmap.createBitmap( bgimage, 0, 0, ( int ) width , ( int ) height, matrix, true );
if( bitmap != bgimage ){
bgimage.recycle();
在res/values/attr.xml文件中定义自定义View的自定义属性:
&declare-styleable name="RootSurfaceView"&
&attr name="background" format="reference" /&
&attr name="view_width" format="dimension" /&
&attr name="view_height" format="dimension" /&
&/declare-styleable&
没有必要使用硬件加速的界面建议关掉硬件加速
通过DDMS的heap跟踪发现,相比于关闭硬件加速,在打开硬件加速的情况下会消耗更多的内存,但有的界面打开或者关闭硬件加速对程序的运行效率并没有太大的影响,此种情况下可以考虑在AndroidManifest.xml文件中关闭掉对应Activity的硬件加速,like this:
&!-- 设置界面 --&
android:name=".SettingActivity"
android:hardwareAccelerated="false"
android:screenOrientation="sensorLandscape"
android:theme="@style/Translucent_NoTitle"&
&/activity&
注意:如果使用到WebView、视频播放、手写、动画等功能时,关掉硬件加速会严重音效程序的运行效率,这种情况可以只关闭掉Activity中某些view的硬件加速,整个Activity的硬件加速不关闭。
如果Activity中某个View需要关闭硬件加速,但整个Activity不能关闭,可以调用view层级关闭硬件加速的方法:
// view.setLayerType || 在定义view的构造方法中调用该方法
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
尽量少用AnimationDrawable,如果必须要可以自定义图片切换器代替AnimationDrawable
AnimationDrawable也是一个耗内存大户,图片帧数越多耗内存越大,具体可以查看AnimationDrawable的源码,在AnimationDrawable实例化的时候,Drawable的createFromXmlInner方法会调用AnimationDrawable的inflate方法,该方法里面有一个while循环去一次性将所有帧都读取出来,也就是在初始化的时候就将所有的帧读在内存中了,有多少张图片,它就要消耗对应大小的内存。
虽然可以通过如下方式释放AnimationDrawable占用的内存,但是当退出使用AnimationDrawable的界面,再次进入使用其播放动画时,会报使用已经回收了的图片的异常,这个应该是Android对图片的处理机制导致的,虽然Activity被finish掉了,但是这个Activity中使用到的图片还是在内存中,如果被回收,下次进入时就会报异常信息:
* 释放AnimationDrawable占用的内存
@SuppressWarnings("unused")
private void freeAnimationDrawable(AnimationDrawable animationDrawable) {
animationDrawable.stop();
for (int i = 0; i & animationDrawable.getNumberOfFrames(); ++i){
Drawable frame = animationDrawable.getFrame(i);
if (frame instanceof BitmapDrawable) {
((BitmapDrawable)frame).getBitmap().recycle();
frame.setCallback(null);
animationDrawable.setCallback(null);
通常情况下我会自定义一个ImageView来实现AnimationDrawable的功能,根据图片之间切换的时间间隔来定时设置ImageView的背景图片,这样始终只是一个ImageView实例,更换的只是其背景,占用内存会比AnimationDrawable小很多:
* 图片动态切换器
public class AnimImageView {
private static final int MSG_START = 0xf1;
private static final int MSG_STOP
private static final int STATE_STOP = 0xf3;
private static final int STATE_RUNNING = 0xf4;
/* 运行状态*/
private int mState = STATE_RUNNING;
private ImageView mImageV
/* 图片资源ID列表*/
private List&Integer& mResourceIdList =
/* 定时任务*/
private Timer mTimer =
private AnimTimerTask mTimeTask =
/* 记录播放位置*/
private int mFrameIndex = 0;
/* 播放形式*/
private boolean isLooping =
public AnimImageView( ){
mTimer = new Timer();
* 设置动画播放资源
public void setAnimation( HanziImageView imageview, List&Integer& resourceIdList ){
mImageView =
mResourceIdList = resourceIdL
开始播放动画
@param loop 时候循环播放
@param duration 动画播放时间间隔
public void start(boolean loop, int duration){
isLooping =
mFrameIndex = 0;
mState = STATE_RUNNING;
mTimeTask = new AnimTimerTask( );
mTimer.schedule(mTimeTask, 0, duration);
* 停止动画播放
public void stop(){
if (mTimeTask != null) {
mFrameIndex = 0;
mState = STATE_STOP;
mTimer.purge();
mTimeTask.cancel();
mTimeTask =
mImageView.setBackgroundResource(0);
* 定时器任务
class AnimTimerTask extends TimerTask {
public void run() {
if(mFrameIndex & 0 || mState == STATE_STOP){
if( mFrameIndex & mResourceIdList.size() ){
Message msg = AnimHanlder.obtainMessage(MSG_START,0,0,null);
msg.sendToTarget();
mFrameIndex = 0;
if(!isLooping){
Message msg = AnimHanlder.obtainMessage(MSG_STOP,0,0,null);
msg.sendToTarget();
private Handler AnimHanlder = new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case MSG_START:{
if(mFrameIndex &=0 && mFrameIndex & mResourceIdList.size() && mState == STATE_RUNNING){
mImageView.setImageResource(mResourceIdList.get(mFrameIndex));
mFrameIndex++;
case MSG_STOP:{
if (mTimeTask != null) {
mFrameIndex = 0;
mTimer.purge();
mTimeTask.cancel();
mState = STATE_STOP;
mTimeTask =
mImageView.setImageResource(0);
其它优化方式
尽量将Activity中的小图片和背景合并,一张小图片既浪费布局的时间,又平白地增加了内存占用;
不要在Activity的主题中为Activity设置默认的背景图片,这样会导致Activity占用的内存翻倍:
&!--千万不要在主题中为Activity设置默认背景
&style name="Activity_Style" parent="@android:Theme.Holo.Light.NoActionBar"&
&item name="android:background"&@drawable/*&/item&
对于在需要时才显示的图片或者布局,可以使用ViewStub标签,通过sdk/tools目录下的hierarchyviewer.bat查看布局文件会发现,使用viewstub标签的组件几乎不消耗布局的时间,在代码中当需要显示时再去实例化有助于提高Activity的布局效率和节省Activity消耗的内存。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
Android老鸟给新人的建议、资源。
更优质的原创内容,欢迎关注技术公众号,微信搜索:“Open软件开发小组”或者“open_dev”
· 9837人关注
· 351人关注
Android知识点滴
· 86人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:

我要回帖

更多关于 安卓app 内存占用标准 的文章

 

随机推荐