性能优化的常用方法

性能优化的常用方法,第1张

20条App性能优化的建议

你的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和平谈判。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/777790.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存