其他优化
1 .静态变量优化
尽量不使用静态变量保存核心数据。这是为什么呢?
- 这是因为android的进程并不是安全的,包括application对象以及静态变量在内的进程级别变量并不会一直呆着内存里面,因为它很有会被kill掉。
- 当被kill掉之后,实际上app不会重新开始启动。Android系统会创建一个新的Application对象,然后启动上次用户离开时的activity以造成这个app从来没有被kill掉的假象。而这时候静态变量等数据由于进程已经被杀死而被初始化,所以就有了不推荐在静态变量(包括Application中保存全局数据静态数据)的观点。
2 注解替代枚举
- 使用注解限定传入类型
比如,尤其是写第三方开源库,对于有些暴露给开发者的方法,需要限定传入类型是有必要的。
举个例子: 刚开始的代码
/**
* 设置播放器类型,必须设置
* 注意:感谢某人建议,这里限定了传入值类型
* 输入值:111 或者 222
* @param playerType IjkPlayer or MediaPlayer.
*/
public void setPlayerType(int playerType) {
mPlayerType = playerType;
}
优化后的代码,有效避免第一种方式开发者传入值错误
/**
* 设置播放器类型,必须设置
* 注意:感谢某人建议,这里限定了传入值类型
* 输入值:ConstantKeys.IjkPlayerType.TYPE_IJK 或者 ConstantKeys.IjkPlayerType.TYPE_NATIVE
* @param playerType IjkPlayer or MediaPlayer.
*/
public void setPlayerType(@ConstantKeys.PlayerType int playerType) {
mPlayerType = playerType;
}
/**
* 通过注解限定类型
* TYPE_IJK IjkPlayer,基于IjkPlayer封装播放器
* TYPE_NATIVE MediaPlayer,基于原生自带的播放器控件
*/
@Retention(RetentionPolicy.SOURCE)
public @interface IjkPlayerType {
int TYPE_IJK = 111;
int TYPE_NATIVE = 222;
}
@IntDef({IjkPlayerType.TYPE_IJK,IjkPlayerType.TYPE_NATIVE})
public @interface PlayerType{}
使用注解替代枚举,代码如下所示
@Retention(RetentionPolicy.SOURCE)
public @interface ViewStateType {
int HAVE_DATA = 1;
int EMPTY_DATA = 2;
int ERROR_DATA = 3;
int ERROR_NETWORK = 4;
}
3. 多渠道打包优化
-
还在手动打包吗?尝试一下python自动化打包吧……
瓦力多渠道打包的Python脚本测试工具,通过该自动化脚本,自需要run一下或者命令行运行脚本即可实现美团瓦力多渠道打包,打包速度很快。配置信息十分简单,代码中已经注释十分详细。可以自定义输出文件路径,可以修改多渠道配置信息,简单实用。
项目地址:github.com/yangchong21…
4.TrimMemory和LowMemory优化
- 可以优化什么?
在onTrimMemory() 回调中,应该在一些状态下清理掉不重要的内存资源。对于这些缓存,只要是读进内存内的都算,例如最常见的图片缓存、文件缓存等。拿图片缓存来说,市场上,常规的图片加载库,一般而言都是三级缓存,所以在内存吃紧的时候,我们就应该优先清理掉这部分图片缓存,毕竟图片是吃内存大户,而且再次回来的时候,虽然内存中的资源被回收掉了,依然可以从磁盘或者网络上恢复它。 - 大概的思路如下所示
在lowMemory的时候,调用Glide.cleanMemory()清理掉所有的内存缓存。
在App被置换到后台的时候,调用Glide.cleanMemory()清理掉所有的内存缓存。
在其它情况的onTrimMemory()回调中,直接调用Glide.trimMemory()方法来交给Glide处理内存情况。
来源:https://blog.csdn.net/Aerfa789/article/details/100940357