Android高级之十二讲之内存、电量、卡顿、流量

本文介绍了Android应用性能优化的关键点,包括如何降低内存消耗,避免内存泄露,进行电量优化,减少流量使用,以及解决卡顿问题。提到的方法包括使用Application上下文,图片压缩,Bitmap的inBitmap使用,及时关闭Cursor,减少无效绘制,避免死循环和不必要的网络请求,以及使用LeakCanary等工具进行监控和优化。
摘要由CSDN通过智能技术生成

本文来自刘兆贤的博客_CSDN博客-Java高级,Android旅行,Android基础领域博主 ,引用必须注明出处!

一、优化背景:

安卓应用的内存往往是有限的,从开始的8M到16M,24M,32M,48M,64M等逐步变大,但内存的变大是由于分辨率的提高导致,并不意味着内存的可使用量随之增加,而不及时回收(即使Java有自己的垃圾回收机制),容易造成内存过高,引起手机变卡,体验流畅性下降)。

经测试,目前Android8及以上256MB,Android6-7是128MB,测试方法:

Runtime.getRuntime().maxMemory();

-----------------------------------------------------------------------------------------------------------

二、降低内存消耗的办法

有以下几种常见办法:

1、图片声明使用的context使用Application。

回收时清除ImageView的drawable。

但是如果使用context.startActivity会报一个错

 android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

因此如果确定用application启动activity,要注意加个FLAG_ACTIVITY_NEW_TASK这个flag

但是ProgressDialog,不能使用用application,因为它依赖着当前页面。

2、使用viewStub占位,避免经常使用gone方法,减少对象的加载和初始化

3、使用merge把能合并的布局统统合并,在hierachyviewer里面可以看到布局的复杂度

如果使用include,给布局加margin的话,需要同时设置include标签的宽高

4、去掉decorView和window的背景,往往由于应用有自身的色调搭配

5、通过canvas的clip方法,避免在看不到的地方画图,通过quickReject方法来在确定的区域比如矩形内绘制,

跳过非既定区域内绘制

6、使用9path文件和自定义图片,以及透明背景,来防止过度绘制

7、列表可以给定一个高度(根据item的高度来动态设置),来防止重复计算高度和执行布局方法

8、合理选择组件,选择简单的而非复杂的组件(原因,如果你自定义过复杂组件自己就会明白)

9、开启新进程作为服务进程和工具进程-最大招,有效降低当前应用的内存消耗

10、避免在onDraw频繁调用。

11、 在动画结束或onPause方法里,清除控制的动画效果:mImageView.clearAnimation()

-----------------------------------------------------------------------------------------------------------------

三、避免内存泄露的办法:

1、及时清除对象或回调引用的context(或使用Application),降低引用链长度


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘兆贤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值