广州总部电话:020-85564311

TOP

收起快捷

首页 > 关于途必 > 途必学院 > APP开发:性能优化建议,全面提升移动用户使用体验
APP开发:性能优化建议,全面提升移动用户使用体验
发布日期:2017-12-16 09:04:09
浏览次数:
来源:广州网站建设

      移动互联网普及,手机已经成为工作生活的日常标配。面对巨大的移动用户流量,不少企业商家不单单进行PC端的网站建设,更纷纷搭建手机网站APP开发小程序开发,打造互联网全方位解决方案,实现品牌多渠道快速传播。今天途必科技程序猿就给大家说说APP开发一些性能优化的建议,让移动用户使用APP更流畅,手机占存更小,全面提升移动端用户的使用体验。

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的类

5. 高性能MemoryFile类,对于I/O需要频繁操作的,主要是和外部存储相关的I/O操作,MemoryFile通过将 NAND或SD卡上的文件,分段映射到内存中进行修改处理,这样就用高速的RAM代替了ROM或SD卡,性能自然提高不少,对于Android手机而言同时还减少了电量消耗。该类实现的功能不是很多,直接从Object上继承,通过JNI的方式直接在C底层执行。

 

内存优化工具

推荐内存分析工具:Memory Monitor  适用于Android Studio

推荐内存泄露分析工作:MAT 适用于eclipse、Android Studio

内存泄露监控工具:LeakCanary

责任编辑:途必技术部

版权所有:http://www.uweb.net.cn (优网科技) 转载请注明出处

关闭
推荐新闻
童心无界 童萌有礼——六一儿童节活动来啦!
童心无界 童萌有礼——六一儿童节活动来啦!
六一儿童节是属于“孩子们”节日,不管是天真卡爱的小朋友,还是童心未泯的大朋友。跟着我们一起重回童年,让童心出发吧。
2024.06.03 10:56:04
途必科技十一月生日会--关怀与爱
途必科技十一月生日会--关怀与爱
时隔一个月,又迎来了我们可爱小伙伴们的生日,本月有好几位的寿星生日。途必科技为了关怀员工,特地举办了此次的集体生日会活动,并且还有很多丰富的小吃零食,饮品饮料,当然更重要的蛋糕也是不可或缺的。
2023.11.29 10:57:26
一起成长---十月途必科技员工生日会
一起成长---十月途必科技员工生日会
秋高气爽的季节里头,我们迎来了十月份途必科技小伙伴们的生日,在这个温馨的聚会里一同感受着生日的快乐,能在工作繁忙之余享受到节日带来的温暖。每一次的生日会都是大家在共同的成长,当然啦,成长的路上少不了磕磕碰碰,但是在我们的人生里头,总会相遇温暖,陪伴左右,成长也就变得更加有意义。
2023.10.30 09:29:30
温暖与你同在-八月途必科技小伙伴生日会
温暖与你同在-八月途必科技小伙伴生日会
在每个人成长的背后,总会有温暖相伴,像在途必科技的大家庭里,大家都可以感受到这样的氛围,又温馨,有爱。也许有时候自己都忘了的生日,却是有人记得你的生日,有人愿意为你祝福,这又何尝不是一种温暖呢。途必科技与大家一同成长,也将爱送给大家,途必科技对出席生日会的每一位小可爱表示热烈的欢迎和衷心的感谢,同时也为八月份生日的寿星们送上美丽的祝福~祝愿可爱的寿星们天天开心,心想事成,身体健康,另外也希望每位途必科技的小伙伴在未来的工作中越来越顺利,生活里也越来越好。
2023.08.30 10:32:55
这次圣诞节,我们玩大的
这次圣诞节,我们玩大的
这次的圣诞节,我们玩大的,为了让大家感受到如火热情般的圣诞节,此次带来了很多不一样的玩法和活动。行政人事部代表途必科技给大家制造了很多不一样的惊喜,在这里你可以收获丰富满满的礼物,漂亮小姐姐和可爱圣诞老人的合影,小伙伴们其乐融融的氛围,
2022.12.25 17:00:04
推荐案例
眼光高度决定品牌厚度!
业务展示
专业团队,品质服务

预算不足没关系,

这里

广州市途必企业管理中心(有限合伙)版权所有 粤ICP备2020085998号 Copyright © 2023 All Rights Reserved
 
扫码咨询

专属顾问
扫码咨询您的优网专属顾问!