当前位置: 代码网 > it编程>App开发>Android > Android开发者必知的内存、性能优化细节(1)

Android开发者必知的内存、性能优化细节(1)

2024年08月02日 Android 我要评论
process后面需要记住要有个":",这表示该进程属于你的app。一般情况下,一块基本的空进程需要的内存大小在1.4m左右。

process后面需要记住要有个":",这表示该进程属于你的app。一般情况下,一块基本的空进程需要的内存大小在1.4m左右。

adb shell dumpsys meminfo com.example.android.apis:empty

8、基本性能优化方法的基本原则:

1)不要做你不必要的工作;
2)不要申请不必要的内存;

例如,你明明知道一个方法返回一个string之后,你需要对这个string重新进行修改,那么就不要返回一个string,返回一个stringbuffer会是你更好的选择。

再比如,使用int比使用integer占用更少的空间。这个大家肯定都是晓得的。

数组比一个map拥有更好的性能。

如果你的方法不需要访问类字段,那么让你的方法是static的吧,这将会带来15%-20%速度的提升。

对于常量,请尽量使用static and final定义。如果使用final定义常量之后,会减少编译器在类生成时初始化方法调用时对常量的存储,对于int型常量,将会直接使用其数值来进行替换,而对于string对象将会使用相对廉价的“string constant”指令来替换字段查找表。虽然这个方法并不完全对所有类型都有效,但是,将常量声明为static final绝对是一个好的做法。

避免getters/setters。虽然在一般的面向对象的设计模式中使用getter和setter是稀松平常的事情,但是在android中使用getters/setters是一个非常糟糕的主意,方法的调用相对于直接查找字段来说十分的昂贵。在没有jit的情况下,直接对字段进行访问要比通过getter访问快了近3倍。在有jit的情况下,前者比后者快近7倍。

使用最新的循环方式。比如增强for。

避免使用浮点类型。在某些可以的情况下,将浮点替换成整型数据,然后进行计算会得到更精确的结果和更快的速度。

小心使用native methods。这里需要纠正的是,native 方法并不一定能提高你应用的速度,有些甚至会拖后腿,因为,首先来说就需要一部分开销在java-native transition上,而且jit并不能对其进行优化。另外你需要为每个你想要在其上运行的系统结构上进行编译;即便是同一个处理器上,你也可能需要多个版本,比如为g1上的arm处理器编译的就不能很好的在nexus one的arm上运行。native代码最主要的用途是,你已经有了很多native 代码,并且你迫切希望接入android中。而不是使用native method来提高你应用中某部分代码的运行速度。

对于效率的提高除了使用遵守上面两条外基本准则外,选择合适的算法和数据结构也是非常关键的。

9、关于ui上的一些问题

hierarchy viewer 通过他,可以看到你自己的layout文件存在的问题。你可以看到你的layout每一部分计算,布局,渲染所需要的时间。尽量的使你的layout扁平话,深度最好保持 在三层之内 。 relativelayout 是解决使用linearlayout堆叠多层问题的利剑。那些为了方便 使 用linearlayout的layout_weight属性 的哥们,需要重点注意,这个属性真的可以减慢measure速度。所以在使用之前,一定要再三考虑,是否真的不能通过其他方法来完成你要的效果? 官方文档上 推荐使用relativelayout和gridlayout来避免layout深度过深的问题 。 之前看文档,google提供一个叫 viewsub 的控件来优化那些不是必须要立即在ui上显示的控件,感兴趣的同学可以去看看。在api level 1中就提供了这个东西,但是在实际开发中很少见到有人用或者提及(可能是我孤陋寡闻,公司就两个android开发,另一个还要转ios,我们俩的android技术就代表了我们公司的android技术能力,想想真悲哀!),其实蛮好用的。 重用layout。可以使用 将其他布局嵌入到当前布局中。 listview的优化:viewholder的使用;asynctask的使用;针对listview当前滑动状态,对图片数据的加载进行控制;(listview在配以asynctask加载图片时需要注 意图片的加载完显示的位置以及图片的缓存问题,具体可以参考google的 demo )

10、将大消耗操作交给多个线程。

11、如果你的应用需要发送broadcast但是又不希望别的应用获取到,或者你不希望处理别的应用发送的同样的action,那么请使用localbroadcastmanager。

该类是在android support v4中提供的,用来在同一个应用内的不同组件之间发送broadcast。好处上面说了,可以保证应用的私密性。会比全局广播有更高的效率,但是官方文档没有说明具体数值。具体使用方法:

localbroadcastmanager.getinstance(this).registerreceiver( mstatereceiver, mstatusintentfilter);

localbroadcastmanager.getinstance(this).sendbroadcast(localbroadcastintent);

另外broadcast的注册一定要放在activity的有响应的时候注册,一般在onresume()注册,在onpause()的时候取消注册。尽量不要程序走到ondestroy()方法里面才对broadcast取消注册,因为有些时候不会走到该方法,就会导致崩溃或者再次进入界面是多次注册。

12、关于fragment使用:

1)无论在哪里使用getresources()方法,都是需要判断是否获取的为null。

2)在使用fragment+asyntask时的输出结果中最好使用isadded()方法来判断一下,如果为真,那么才进行后续操作。

13、关于动画

动画结束时,不能修改view的层级关系,如果要修改,使用如下方法:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、oppo等大厂,18年进入阿里一直到现在。

深知大多数初中级android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:android)

学习路线+知识梳理

花了很长时间,就为了整理这张详细的知识路线脑图。当然由于时间有限、能力也都有限,毕竟嵌入式全体系实在太庞大了,包括我那做嵌入式的同学,也不可能什么都懂,有些东西可能没覆盖到,不足之处,还希望小伙伴们一起交流补充,一起完善进步。

这次就分享到这里吧,下篇见

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com