你的app为什么要换卡?为什么会占用很大的运行内存?应该如何解决?那篇文章会给你一个谜语。
20条主张
1。ITMap的合理利用:使用位图后,要求立即盗用recycle()方法释放位图占用的内存空,而不是等待Android管理系统终止释放。
编码示例:
//之前先判断是否可以私对接。
如果(位图!=null&&!bitmap.isRecycled()){
bitmap.recycle();
bitmap=null
}
system.GC();
2。使用staticfinal定义变量
静态finalintintVal=42
静态最终字符串strVal="Hello,world!";
将方法或类声明为final不会发送函数异常提升,但会帮助C语言编译器恶化编码。例如,如果C语言编译器知道一个getter方法不会被轻载,C语言编译器就会接受内联盗用。
3。静态数据方法取代真实模拟方法
如果不需要特殊工具的字段名,方法设置为静态数据,那么盗用会加速15%到20%。这也是一个很好的做法,因为从方法声明中可以看出,这个特殊工具的形状不需要升级。
4。减少不必要的偶数自变量
只要不鼓励静态成员函数选择资产过度消耗的真实例子,就像上下文一样,如果上下文的选择超过了自身的恶性循环时间,就会导致上下文的泄露。所以只要使用像应用程序这样的上下文案例。在整个过程中盗用Context.getApplicationContext()或Activity.getApplication()可以得到应用专用的工具。
5。不鼓励创建不必要的特殊工具:也就是说,不鼓励创建短命的临时特殊工具。减少特殊工具的创建可以减少残留物的收集,从而减少对客户体验的伤害。
例如,在频繁控制字符串数组时,使用StringBuffer而不是String。
关于所有的基本情况:int数组比Integer数组好,也是对整个故事的梳理和综合。两个int数组的功能比(int,int)专用工具数组的功能要好很多。不鼓励使用浮面号
但体验是,在安卓武器装备中,浮面数量会比整容慢一倍。
7。与其连接心脏,不如使用真实的身体
假设你有一个HashMap的专用工具,可以声明为HashMapaboutMap:
mapmap1=newHashMap();
HashMapmap2=newHashMap();
哪个更强?
最好还是按照传统的丑图,这样可以修改它的详细真实类,只要哪个类要管图就行。传统法式就传统法式而言是准确的,但不适合嵌入式管理系统。盗用一颗心比盗用一个真正的班级要花两倍的时间。如果HashMap在细节上适合你的法式风格,那么使用Map的成本是多少?如果买不起部分住宅,肯定是先不鼓励使用地图,剩下的就交给IDE提供的重建功能吧。(虽然大家的API都是例外:一个好的API往往会牺牲一些功能)
8。会见成员函数比会见局部自变量慢得多
For循环:不需要吞噬for的第二个前提条件中的所有方法。
示例:for(intI=0;我<this.getcount();我){}
示例:intcount=this.mCountintcount=this.getcount();
for(intI=0;我<数数;i){
}
9。当专用资产工具不再使用时,应立即关闭,使其缓存文件能立即被收集并私下对接。
例如光标、文件文档等。都要求特殊资本工具最终已经关闭,以此来劝阻特殊资产工具在非常严重的情况下被释放的安全隐患。
10。当广播振动器申请注册和不雅观察者申请注册的要求尚未使用时,注册申请将被取消。
例如,假设监控管理系统的电话呼叫服务已经在活动中,您可以在活动中为PhoneStateListener定义一个特殊的工具,并申请在TelephoneManager服务中注册它。至于活动专用工具,其实这个活动专用工具在被要求退出后就会被释放和丢失。但如果在已经发布活动专用工具的情况下,忘记消除之前申请注册的PhoneStateListener专用工具,就会导致活动没有被GC私自对接。如果你一直在赚取和消费哪个活动,最终会导致频繁的GC情况,因为大量的活动专用工具被私人收集和停靠,导致内存不足。
十一。有效控制管理系统中内置的资产。Android管理系统内嵌了很多资产,比如字符串、颜色定义、常用图标照片、动画风格、简单的整体规划等。有特殊要求,资产可以用法式间接选择。这不仅减少了运行内存,也减少了apk的大小。
12。主视图复用,利用ViewHolder实现ConvertView复用,基本上是所有器皿控件的应急处置方法,比如ListView,GridView。
十三。当使用最差数据信息情况时,特殊工具的数量相对较少,ArrayMap交换使用HashMap,不鼓励使用实例。引用自变量很方便,但好在会牺牲性命进行速度战,大大减少文档量。
14。照片运行记忆退化
在Android提供的各种位图文件布局中,RGB_8888是最底层的,这也是管理系统默认的位图文件布局。其他类别都减少了位图文件的一般描述,可以减少运行内存消耗。比如在一些照片和小显示屏对图片数量没有要求的情况下,可以使用RGB_565、ARGB_4444等图像布局。
图像缩放:inSampleSize、inScaled、density和inTargetDensity
位图运行内存重:使用inBitmap可以分离成LruCache现实。
推荐开源系统库:picasso,Glide
15。Android集合通信架构凌空。
16。专用工具库和螺纹库的管理和利用。
十七。请使用IntentService替换该服务。
IntentService缺点:新的开放流程;论应急反应的意图:实施主动撤离。
18。只要不是一两个特性,就用近似的产品类库。
19。最好在不取消的时候将专用工具隐式设置为Null,这样可以减少GC的打开和关闭。
20。了解并利用类库。
一些例子
1.在紧急情况下处理字符串时,只需使用String.indexOf()、String.lastIndexOf()等即可。,尤其是真正的方法。这些方法都是用C/C实现的,比Java循环快10到100倍。
2.System.arraycopy方法在NexusOne上已经有JIT,自停号的周期快了9倍。
3.android.text.format中包含的Formatter类提供了IP地址转换、文档大小转换等方法;DateFormat类,它提供了多种时间转换方法,所有这些方法在长度上都始终有效。
4.TextUtils类,关于字符串数组应急处置Android为你提供了一个简单的TextUtils类。如果没有排除应急处置的简单内容,考虑正则表达式,可以体会一下哪个类有android.text.TextUtils
5.下层函数是MemoryFile,需要频繁控制I/O,主次函数是与内存相关的I/O控制。MemoryFile将运行内存中的NAND或SD卡上的文件在整个过程中以分段的方式进行抵销,以终止调整和应急处理,这样ROM或SD卡就被低速RAM所替代,其功能也就自然发展起来了。此外,Android设备的使用降低了功耗。这种现实的作用并不多。间接性由对象承担。间接性贯穿了JNI的整个过程,一直在C的底层实现。
运行记忆退化项目
推荐运行内存说明项:内存监视器与AndroidStudio共享。
推荐运行内存的传统解释:MAT用的是eclipse和AndroidStudio。
运行内存传统监管项目:LeakCanary
文章由@假温柔本创发布。我已经同意了,并劝阻拦截。
图片来自unsplash,据CC0和平谈判。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)