导航:首页 > 操作系统 > android内存优化

android内存优化

发布时间:2022-01-29 12:29:13

❶ 如何降低安卓系统的运行使用内存(使用优化软件除外)

Root,删除大多数手机自带的非系统软件。减少后台服务进程。

❷ 在android开发中,有哪些好的内存优化方式

可以考虑使用ArrayMap/SparseArray而不是HashMap等传统数据结构。通常的HashMap的实现方式更加消耗内存,因为它需要一个额外的实例对象来记录Mapping操作。另外,SparseArray更加高效,在于他们避免了对key与value的自动装箱(autoboxing),并且避免了装箱后的解箱。
2. 避免在Android里面使用Enum
Android官方培训课程提到过“Enums often require more than twice as much memory as static constants. You should strictly avoid using enums on Android.”,具体原理请参考《Android性能优化典范(三)》,所以请避免在Android里面使用到枚举。
3. 减小Bitmap对象的内存占用
Bitmap是一个极容易消耗内存的大胖子,减小创建出来的Bitmap的内存占用可谓是重中之重,,通常来说有以下2个措施:
inSampleSize:缩放比例,在把图片载入内存之前,我们需要先计算出一个合适的缩放比例,避免不必要的大图载入。
decode format:解码格式,选择ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差异
4.Bitmap对象的复用
缩小Bitmap的同时,也需要提高BitMap对象的复用率,避免频繁创建BitMap对象,复用的方法有以下2个措施
LRUCache : “最近最少使用算法”在Android中有极其普遍的应用。ListView与GridView等显示大量图片的控件里,就是使用LRU的机制来缓存处理好的Bitmap,把近期最少使用的数据从缓存中移除,保留使用最频繁的数据,
inBitMap高级特性:利用inBitmap的高级特性提高Android系统在Bitmap分配与释放执行效率。使用inBitmap属性可以告知Bitmap解码器去尝试使用已经存在的内存区域,新解码的Bitmap会尝试去使用之前那张Bitmap在Heap中所占据的pixel data内存区域,而不是去问内存重新申请一块区域来存放Bitmap。利用这种特性,即使是上千张的图片,也只会仅仅只需要占用屏幕所能够显示的图片数量的内存大小
4. 使用更小的图片
在涉及给到资源图片时,我们需要特别留意这张图片是否存在可以压缩的空间,是否可以使用更小的图片。尽量使用更小的图片不仅可以减少内存的使用,还能避免出现大量的InflationException。假设有一张很大的图片被XML文件直接引用,很有可能在初始化视图时会因为内存不足而发生InflationException,这个问题的根本原因其实是发生了OOM。

5.StringBuilder
在有些时候,代码中会需要使用到大量的字符串拼接的操作,这种时候有必要考虑使用StringBuilder来替代频繁的“+”。
6.避免在onDraw方法里面执行对象的创建
类似onDraw等频繁调用的方法,一定需要注意避免在这里做创建对象的操作,因为他会迅速增加内存的使用,而且很容易引起频繁的gc,甚至是内存抖动。
7. 避免对象的内存泄露
类的静态变量持有大数据对象
静态变量长期维持到大数据对象的引用,阻止垃圾回收。
非静态内部类存在静态实例
非静态内部类会维持一个到外部类实例的引用,如果非静态内部类的实例是静态的,就会间接长期维持着外部类的引用,阻止被回收掉。
资源对象未关闭
资源性对象比如(Cursor,File文件等)往往都用了一些缓冲,我们在不使用的时候,应该及时关闭它们, 以便它们的缓冲及时回收内存。它们的缓冲不仅存在于java虚拟机内,还存在于java虚拟机外。 如果我们仅仅是把它的引用设置为null,而不关闭它们,往往会造成内存泄露。
解决办法: 比如SQLiteCursor(在析构函数finalize(),如果我们没有关闭它,它自己会调close()关闭), 如果我们没有关闭它,系统在回收它时也会关闭它,但是这样的效率太低了。 因此对于资源性对象在不使用的时候,应该调用它的close()函数,将其关闭掉,然后才置为null. 在我们的程序退出时一定要确保我们的资源性对象已经关闭。 程序中经常会进行查询数据库的操作,但是经常会有使用完毕Cursor后没有关闭的情况。如果我们的查询结果集比较小, 对内存的消耗不容易被发现,只有在常时间大量操作的情况下才会复现内存问题,这样就会给以后的测试和问题排查带来困难和风险,记得try catch后,在finally方法中关闭连接
Handler内存泄漏
Handler作为内部类存在于Activity中,但是Handler生命周期与Activity生命周期往往并不是相同的,比如当Handler对象有Message在排队,则无法释放,进而导致本该释放的Acitivity也没有办法进行回收。

❸ android开发内存优化之如何有效避免oom

  1. 减小对象的内存占用

  2. 内存对象的重复利用

  3. 避免对象的内存泄露

  4. 内存使用策略优化

❹ 安卓手机运行内存太小怎么进行优化

安卓系统手机为智能机器,和电脑一样,为了保证手机正常使用,会自动开启部分程序进程(不是程序),当您清除之后,进程还是会再次显示。若经常有程序自动启动占用手机内存,建议:
1.关闭后台运行的程序:点击屏幕左下角近期任务键-点击要关闭的应用程序右上角的“X”/下方的关闭全部(部分机器操作方式:长按HOME键(主屏幕键)启动任务管理器,点击左下角饼形图标,点击清除RAM数据)。
2.部分机器支持智能管理器或内存管理器,建议通过该功能手动关闭自动运行的应用程序。
3.部分第三方软件支持开机后自动启动功能,建议打开自动运行的软件禁用此功能。

❺ android 面试内存优化怎么回答

android 性能主要之响应速度 和UI刷新速度。
可以参考博客:Android系统性能调优工具介绍
首先从函数的耗时来说,有一个工具TraceView 这是androidsdk自带的工作,用于测量函数耗时的。
UI布局的分析,可以有2块,一块就是Hierarchy Viewer 可以看到View的布局层次,以及每个View刷新加载的时间。
这样可以很快定位到那块layout & View 耗时最长。
还有就是通过自定义View来减少view的层次。

❻ Android代码内存优化,常驻内存的应用有哪些

一些常驻内存的应用,比如Launcher、安全中心、电话等,在用户使用过要退出的时候,需要调用OnTrimMemory来及时释放用户使用的时候所产生的多余的内存资源:比如动态生成的View、图片缓存、Fragment等。

❼ android 如何更好的回收内存空间,有没有强

Android内存优化大全

OOM:

内存泄露可以引发很多的问题:

1.程序卡顿,响应速度慢(内存占用高时JVM虚拟机会频繁触发GC)

2.莫名消失(当你的程序所占内存越大,它在后台的时候就越可能被干掉。反之内存占用越小,在后台存在的时间就越长)

3.直接崩溃(OutOfMemoryError)

ANDROID内存面临的问题:

1.有限的堆内存,原始只有16M

2.内存大小消耗等根据设备,操作系统等级,屏幕尺寸的不同而不同

3.程序不能直接控制

4.支持后台多任务处理(multitasking)

5.运行在虚拟机之上

5R:

本文主要通过如下的5R方法来对ANDROID内存进行优化:

1.Reckon(计算)

首先需要知道你的app所消耗内存的情况,知己知彼才能百战不殆

2.Rece(减少)

消耗更少的资源

3.Reuse(重用)

当第一次使用完以后,尽量给其他的使用

5.Recycle(回收)

返回资源给生产流

4.Review(检查)

回顾检查你的程序,看看设计或代码有什么不合理的地方。

详细

❽ 安卓手机,一开机内存就占用80%多了,不管怎样优化一直是90%左右,2g的运行内存,怎么处理啊

"""建议您:
1.点击屏幕左下角的【最近应用程序】键(即屏幕上唯一物理按键左侧的触摸按键)-点击左下角【圆圈】图标-点击应用程序右侧的【结束】图标或【结束全部】关闭后台运行程序。
2.卸载自行安装的应用程序。
3.清除手机上网缓存:浏览器-菜单键(右上角三个小点图标)-设定-隐私和安全-隐私-删除个人数据。
4.清除已读取的来电、短信等记录""
5.如果手机支持插入外置sd卡,插入SD卡后将文件转存到SD卡中即可"

❾ android4.4手机怎么优化内存

市面上手机清理软件有很多种,主要看楼主喜欢什么样
的和适合用什么手机安全软件,我用的是腾讯手机管家
使用第三方安全软件清理
新版本腾讯手机管家加速功能,则针对手机卡机现象做出专业的优化。
点击优化加速后,后台就会清理一定的垃圾文件,从而达到优化加速功能。
在一键优化方面,更全面的提升手机速度,起到更为人性化的便捷服务。
可以尝试清理后台程序。这个时候,
我们可以在手机管家的健康优化栏里找到进程管理,对进程管理进行清理。

❿ android 性能优化有哪些办法

性能优化的常用方法

主要内容包括布局优化,绘制优化,内存泄露优化,相应速度优化,ListView优化,Bitmap优化,线程优化等,下面主要给你举了其中的几个例子:

(1)布局优化

布局优化的思想很简单,就是尽量减少布局文件的层级。

如何进行优化呢?首先删除布局中无用的控件和层级,其次有选择地使用性能较低的ViewGroup,比如LinearLayout。如果布局中有的布局既可以用LinearLayout也可以用RelativeLayout,那就用LinearLayout,这是因为RelativeLayout比较复杂,他的布局过程花费更多的CPU时间。FrameLayout和LinearLayout一样都是一种简单高效的ViewGroup,因此可以考虑使用他们,但是很多时候,单纯的通过一个LinearLayout或者FrameLayout无法实现产品的效果,需要通过嵌套的方式来完成,这种情况建议采用RelativeLayout,因为ViewGroup的嵌套就相当于增加了布局的层级,同样会降低程序的性能。

布局优化的另一种手段是采用<include>标枪,<merge>标签和ViewStub。<include>标签主要用于布局重用,<merge>标签一般和<include>配合使用,它可以减少布局的层级。而ViewStub则提供了按需加载功能,当需要时才将ViewStub中的布局加载到内存,这提高了程序的初始化效率。

(2)绘制方法

绘制优化是指View的onDraw方法避免执行大量的操作,这主要有两方面。

首先,onDraw中不要创建新的布局对象,这是因为onDraw方法可能会被频繁调用,这样就会在一瞬间产生大量的临时对象,这不仅占用了过多的内存而且还会导致系统更加频繁的gc,降低了程序的执行效率。

另一方面,onDraw方法中不要做耗时的任务,也不能执行成千上万次循环操作,尽管每次循环都很轻量级,但是大量的循环仍然十分抢占CPU的时间片,这会造成View的绘制过程不流畅。

(3)内存泄露优化

内存泄露在开发过程中是一个需要重视的问题,但是由于内存泄露问题对开发人员的经验和开发意识要求比较高,因此这是开发人员最容易犯的错误之一。内存泄露的优化分为两个方面,一方面是在开发过程中避免写出内存泄露的代码,另一方面通过一些分析工具比如MAT来找出潜在的内存泄露继而解决。

关于性能优化的建议

1.避免黄健过多对象;

2.不要过多使用枚举,枚举占用的内存空间比整型大一些。

3.常量使用staticfinal来修饰。

4.使用一些Android特有的数据结构,比如SpareArray和Pair等,他们都具有更好的性能。

5.适当使用软引用和弱引用。

6.采用内存缓存和磁盘缓存

7.尽量采用静态内部类,这样可以避免潜在的内部类而导致的内存泄漏。

阅读全文

与android内存优化相关的资料

热点内容
徒步缓解压力的视频 浏览:238
图像算法口诀 浏览:859
人踩什么解压 浏览:919
php语法检查命令 浏览:330
如何重设服务器网关 浏览:864
世界经济pdf 浏览:108
异或算法找缺失的数 浏览:325
单片机flagt1 浏览:485
单片机清理 浏览:660
东风景逸空调压缩机 浏览:158
天津程序员炒股 浏览:230
pcl源码目录 浏览:968
python分类数据转换 浏览:109
wordpdf不能复制 浏览:961
快捷方式参数命令 浏览:111
cmd命令复制粘贴文件 浏览:584
ug实体快速修剪的命令是什么 浏览:123
软件工程对算法的要求 浏览:935
元史pdf 浏览:97
如何让服务器卡爆不用tnt 浏览:801