广州总部电话:020-85564311
广州总部电话:020-85564311

广州网站建设-小程序商城开发-广州小程序开发-企业微信开发公司-网站建设高端品牌-优网科技

19年
互联网应用服务商
请输入搜索关键词
APP开发:性能优化建议,全面提升移动用户使用体验
发布日期:2017-12-16 09:04:09
浏览次数:3739

      移动互联网普及,手机已经成为工作生活的日常标配。面对巨大的移动用户流量,不少企业商家不单单进行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

优网科技,优秀企业首选的互联网供应服务商

优网科技秉承"专业团队、品质服务" 的经营理念,诚信务实的服务了近万家客户,成为众多世界500强、集团和上市公司的长期合作伙伴!

优网科技成立于2001年,擅长网站建设、网站与各类业务系统深度整合,致力于提供完善的企业互联网解决方案。优网科技提供PC端网站建设(品牌展示型、官方门户型、营销商务型、电子商务型、信息门户型、DIY体验、720全景展厅及3D虚拟仿真)、移动端应用(手机站APP开发)、微信定制开发(微信官网、微信商城、企业微信)、微信小程序定制开发等一系列互联网应用服务。


责任编辑:优网科技

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

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 (优网科技) 转载请注明出处

上一篇 返回列表 下一篇
推荐案例
眼光高度决定品牌厚度 !
广州网站建设-大良实验小学系统开发
广州网站建设-大良实验小学系统开发
大良实验小学于1998年成立,占地4万5千多平方米,是顺德区规模的民办学校之一。现有71个教学班,学生3223人,教职员工436人。学校按广东省一级学校标准建设,配有图书馆、舞蹈室、管乐室、多媒体电子琴室、实验室、英语乐园等功能场室36个,还拥有大礼堂、羽毛球馆、生物园、地理园、游泳池和200米塑胶运动场等活动场所。学校先后荣获“广东省一级学校”、“全国少先队红旗大队”、“广东省首届优秀书香校园”、“广东省书法教育名校”、“广东省综合实践样本学校”等光荣称号。
广州网站建设-海天味业公众号开发
广州网站建设-海天味业公众号开发
海天是中国调味品行业的优秀企业,专业的调味品生产和营销企业,历史悠久,是中华人民共和国商务部公布的首批“中华老字号”企业之一。目前生产的产品涵盖酱油、蚝油、酱、醋、料酒、调味汁、鸡精、鸡粉、腐乳等几大系列百余品种300多规格,年产值过百亿元。
广州网站建设-中凯网站建设
广州网站建设-中凯网站建设
中凯(海南)控股集团有限公司本次项目是集团网站建设,与优网科技合作过程中,双方配合默契,保质保量的仅一个月就完成了整站建设。优网科技帮助中凯(海南)快速树立了一个集团专业形象展示,同时网站的设计效果、体验和交互也让中凯(海南)非常满意。
广州网站建设-中国联塑网站建设
广州网站建设-中国联塑网站建设
中国联塑集团控股有限公司(简称:中国联塑,股份代号:2128.HK )是国内大型建材家居产业集团,产品及服务涵盖管道产品、水暖卫浴、整体厨房、整体门窗、装饰板材、净水设备、消防器材、卫生材料、海洋养殖、环境保护、建材家居渠道与服务等领域。
广州网站建设-前海益广网站建设
广州网站建设-前海益广网站建设
深圳前海益广股权投资有限公司成立于2016年04月18日,注册地位于深圳市前海深港合作区前湾一路1号A栋201室,经营范围包括一般经营项目是:股权投资;受托管理股权投资基金;受托资产管理;企业管理咨询、经济信息咨询;投资兴办实业等。
广州网站建设-萨米特高端品牌网站建设
广州网站建设-萨米特高端品牌网站建设
佛山市萨米特陶瓷销售有限公司始于2000年,在陶瓷行业风潮中发展壮大,是新明珠陶瓷集团的核心品牌。萨米特瓷砖注重营销系统的升级与消费体验模式的实施,倡导“设计+生活”的品牌理念,致力于打造有温度,有态度的瓷砖品牌。用设计提高人居价值,以创新驱动行业发展,与全球不同国家和文化背景的消费者共享美好家居。
广州网站建设-欧迪克网站建设
广州网站建设-欧迪克网站建设
佛山市南海欧迪克五金制品有限公司始创于2003年,致力于发展高端硅镁铝合金安全门窗,木铝门窗、阳光房定制,集研发、生产、销售、服务于一体。自创立以来,系列产品畅销大江南北,获得由权威媒体及单位颁发的多项殊荣。目前为止,“欧迪克门窗”的专卖店遍布全国800多个县市及地区,共有1000多家专卖店辐射全国。
广州网站建设-好太太网站建设
广州网站建设-好太太网站建设
好太太集团是一家集研发、生产、销售、服务于一体的智能家居企业,产品与服务涵盖智能晾晒、智能锁、智能电器等众多领域。坐落于广州番禺区,自1999年始便致力于打造 “好太太”品牌,经过将近二十年的发展,如今好太太已成为全球的晾衣架行业研发、生产、销售、服务商,在中国拥有近2000万户家庭在使用好太太产品。好太太集团于2017年主板上市,成为智能晾晒领域首家A股上市企业。
广州网站建设-中山公用水务网站建设
广州网站建设-中山公用水务网站建设
中山公用事业集团股份有限公司成立于1998年,是一家国有控股的上市公司(SZ:000685)。公司坚持“产业经营+资本运营”双轮驱动的战略思路,定位环保水务为核心业务,通过提升环保水务板块的产业经营能力,与资本运营平台协同增效,致力打造行业内有影响力的领先企业,积极担当社会责任和环境保护的公民企业,促成员工实现自身价值的平台企业。
广州网站建设--华标集团物业公众号
广州网站建设--华标集团物业公众号
华标集团物业为了进一步提升服务质量,满足业主的多元化需求,采用微信公众号作为服务平台,为业主提供日常物业缴费、报事报修、社区活动等便利性服务。本次量身定制的微信公众号,旨在打造一个高效、稳定、便捷的线上服务平台,让业主享受到更加贴心、便捷的物业服务。
广州网站建设-欧派家居集团官网建设
广州网站建设-欧派家居集团官网建设
欧派集团官网作为欧派对外展现品牌形象、传达服务理念的重要信息平台,也向用户展示了欧派最新的资讯和相关的售后服务。优网作为欧派集团的信息化战略合作伙伴,本次的官网开发基于专业的设计水平和扎实的技术能力,为欧派的互联网品牌形象全面升级。
广州网站建设-康臣药业网站建设
广州网站建设-康臣药业网站建设
康臣药业集团(HK.01681)是一家主要从事现代中成药及医用成像对比剂研发、生产及营销的现代化制药企业,创立于1997年,于2013年12月19日在香港联合交易所主板上市,旗下拥有广州康臣药业有限公司、康臣药业(内蒙古)有限责任公司、广西玉林制药集团有限责任公司、广州康臣药物研究有限公司等从事药品生产和研发的企业,运营康臣、玉林等知名医药品牌,在国内建有广东广州、内蒙古通辽、广西玉林等3个生产基地,员工逾2000人。

我要投稿

姓名

文章链接

提交即表示你已阅读并同意《个人信息保护声明》

专属顾问 专属顾问
扫码咨询您的优网专属顾问!
专属顾问
马上咨询
联系专属顾问
联系专属顾问
联系专属顾问
扫一扫马上咨询
扫一扫马上咨询

扫一扫马上咨询

和我们在线交谈!
展开菜单
关于我们
优网观点
项目动态
公司新闻
优网学院
常见问题
收起菜单
活动会议应用
答题应用
班车预定应用
应急值班表应用
春节活动应用
活动直播应用
内部培训及任务应用
返回上一级