加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

20条App机能优化的提议

发布时间:2017-12-20 08:21:27 所属栏目:建站 来源:人人都是产品经理
导读:注:你的app为什么会卡?为什么占用大内存?应该怎么办理?这篇文章会给你谜底。 20 条提议 1. itmap的公道行使:行使Bitmap事后,就必要实时的挪用recycle()要领来开释Bitmap占用的内存空间,而不要等Android体系来举办开释。 代码示例: //先判定是否已
副问题[/!--empirenews.page--]

注:你的app为什么会卡?为什么占用大内存?应该怎么办理?这篇文章会给你谜底。

20条App性能优化的发起

20 条提议

1. itmap的公道行使:行使Bitmap事后,就必要实时的挪用recycle()要领来开释Bitmap占用的内存空间,而不要等Android体系来举办开释。

代码示例:

// 先判定是否已经接纳

if(bitmap != null && !bitmap.isRecycled()){

bitmap.recycle();

bitmap = null;

}

System.gc();

2. 对常量行使static final修饰符

static final int intVal = 42;

static final String strVal = “Hello, world!”;

将一个要领或类声明为final不会带来机能的晋升,可是会辅佐编译器优化代码。举例说,假如编译器知道一个getter要领不会被重载,那么编译器会对其回收内联挪用。

3. 静态要领取代假造要领

假如不必要会见某工具的字段,将要领配置为静态,挪用会加快15%到20%。这也是一种好的做法,由于你可以从要领声明中看出挪用该要领不必要更新此工具的状态。

4. 镌汰不须要的全局变量

只管停止static成员变量引用资源淹灭过多的实例,好比Context,由于Context的引用高出它自己的生命周期,会导致Context走漏。以是只管行使Application这种Context范例。 可以通过挪用Context.getApplicationContext()或 Activity.getApplication()轻松获得Application工具。

5. 停止建设不须要的工具: 就是停止建设夭折的姑且工具。镌汰工具的建设就能镌汰垃圾网络,进而镌汰对用户体验的影响。

譬喻:频仍操纵一个字符串时,行使StringBuffer取代String。

对付全部全部根基范例的组合:int数组比Integer数组好,这也归纳综合了一个基才干实,两个平行的int数组比 (int,int)工具数组机能要好许多。.停止行使浮点数

凡是的履历是,在Android装备中,浮点数会比整型慢两倍。

7. 行使实体类比接口好

假设你有一个HashMap工具,你可以将它声明为HashMap可能Map:

Map map1 = new HashMap();

HashMap map2 = new HashMap();

哪个更好呢?

凭证传统的概念Map会更好些,由于这样你可以改变他的详细实现类,只要这个类担任自Map接口。传统的概念对付传统的措施是正确的,可是它并不得当嵌入式体系。挪用一个接口的引用会比挪用实体类的引用多耗费一倍的时刻。假如HashMap完全得当你的措施,那么行使Map就没有什么代价。假若有些处所你不能确定,先停止行使Map,剩下的交给IDE提供的重组成果好了。(虽然民众API是一个破例:一个好的API经常会捐躯一些机能)

8. 会见成员变量比会见当地变量慢得多

for轮回:不要在for的第二个前提中挪用任何要领

反例:for(int i =0; i < this.getCount(); i++) {}

正例:int count = this.mCount;  int count = this.getCount();

for(int i =0; i < count; i++)  {

}

9. 资源类工具在不行使的时辰,应该实时封锁它们,利便它们的缓存数据可以或许实时接纳。

譬喻:Cursor、File文件等都必要在finally中封锁资源性工具,停止在非常环境下资源工具未被开释的隐患

10. 注册广播吸取器、注册调查者等必要在不行使的时辰打消注册。

譬喻:假设在Activity中,监听体系的电话处事,可以在Activity中界说一个PhoneStateListener的工具,同时将它注册到TelephoneManager处事中。对付Activity工具,理论上要求Activity退出后该Activity的工具就会被开释掉。可是假如在开释Activity工具时,健忘打消之前注册的PhoneStateListener工具,则会导致Activity无法被GC接纳。假如不绝的收支这个Activity,则最终会因为大量的Activity工具没有步伐被接纳而引起频仍的GC环境,乃至导致Out Of Memory。

11. 有用的操作体系自带的资源,Android体系内置了大量的资源,好比字串、颜色界说、常用Icon图片、动画样式、及简朴的机关,没有非凡要求,资源可以在措施中直接引用。这样不只镌汰内存的开销,还可以镌汰apk的巨细。

12. 视图复用,行使ViewHolder实现ConvertView复用,这根基上是全部容器控件的处理赏罚方法,如ListView、GridView等。

13. 行使最优的数据范例,较量少的工具数时,ArrayMap替代HashMap的行使,停止行使列举,列举变量很是利便,但不幸的是它会捐躯执行的速率和并大幅增进文件体积。

14. 图片内存优化

Android提供的多种位图名目中,最高的是RGB_8888,也是体系默认的位图名目,其他几种都镌汰位图通道,可以镌汰内存开销,如一些局部图片、小屏幕手机可能对图片质量要求不高的场景,均可以行使RGB_565,可能ARGB_ 4444 等图像名目。

  • 图片缩放:inSampleSize、inScaled、inDensity和inTargetDensity

  • 位图内存重用:inBitmap的行使,可以团结LruCache实现。

  • 保举开源库:picasso、Glide

15. Android 收集通讯框架Volley。

16. 工具池、线程池的公道行使。

17. 行使IntentService更换Service。

IntentService上风:新开线程;次序处理赏罚Intent;执行完自动退出。

18. 只管不要因一两个特征而行使概略积类库。

19. 工具不消时最好显式置为Null可以镌汰GC开销。

20. 多相识并行使类库。

一些例子

1. 当处理赏罚字串的时辰,只管行使String.indexOf(),String.lastIndexOf()等非凡实现的要领。这些要领都是行使C/C++实现的,比起Java轮回快 10 到 100 倍。

2. System.arraycopy要领在有JIT的Nexus One上,自行编码的轮回快 9 倍。

3. android.text.format包下的Formatter类,提供了IP地点转换、文件巨细转换等要领;DateFormat类,提供了各类时刻转换,都长短常高效的要领。

4. TextUtils类,对付字符串处理赏罚Android为我们提供了一个简质朴用的TextUtils类,假如处理赏罚较量简朴的内容不消去思索正则表达式不妨试试这个在android.text.TextUtils的类

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读