9.其他优化9.1 静态变量优化
尽量不使用静态变量保存核心数据 。这是为什么呢?- 这是因为android的进程并不是安全的 , 包括application对象以及静态变量在内的进程级别变量并不会一直呆着内存里面 , 因为它很有会被kill掉 。- 当被kill掉之后 , 实际上app不会重新开始启动 。Android系统会创建一个新的Application对象 , 然后启动上次用户离开时的activity以造成这个app从来没有被kill掉的假象 。而这时候静态变量等数据由于进程已经被杀死而被初始化 , 所以就有了不推荐在静态变量(包括Application中保存全局数据静态数据)的观点 。
9.2 注解替代枚举
使用注解限定传入类型比如 , 尤其是写第三方开源库 , 对于有些暴露给开发者的方法 , 需要限定传入类型是有必要的 。举个例子:
刚开始的代码
/** * 设置播放器类型 , 必须设置 * 注意:感谢某人建议 , 这里限定了传入值类型 * 输入值:111 或者 222 * @param playerType IjkPlayer or MediaPlayer. */public void setPlayerType(int playerType) { mPlayerType = playerType;}
- 优化后的代码 , 有效避免第一种方式开发者传入值错误
- 使用注解替代枚举 , 代码如下所示
还在手动打包吗?尝试一下Python自动化打包吧……瓦力多渠道打包的Python脚本测试工具 , 通过该自动化脚本 , 自需要run一下或者命令行运行脚本即可实现美团瓦力多渠道打包 , 打包速度很快 。配置信息十分简单 , 代码中已经注释十分详细 。可以自定义输出文件路径 , 可以修改多渠道配置信息 , 简单实用 。项目地址:http://github.com/yangchong21…
9.4 TrimMemory和LowMemory优化
可以优化什么?在 onTrimMemory() 回调中 , 应该在一些状态下清理掉不重要的内存资源 。对于这些缓存 , 只要是读进内存内的都算 , 例如最常见的图片缓存、文件缓存等 。拿图片缓存来说 , 市场上 , 常规的图片加载库 , 一般而言都是三级缓存 , 所以在内存吃紧的时候 , 我们就应该优先清理掉这部分图片缓存 , 毕竟图片是吃内存大户 , 而且再次回来的时候 , 虽然内存中的资源被回收掉了 , 依然可以从磁盘或者网络上恢复它 。大概的思路如下所示在lowMemory的时候 , 调用Glide.cleanMemory()清理掉所有的内存缓存 。在App被置换到后台的时候 , 调用Glide.cleanMemory()清理掉所有的内存缓存 。在其它情况的onTrimMemory()回调中 , 直接调用Glide.trimMemory()方法来交给Glide处理内存情况 。
9.5 轮询操作优化
什么叫轮训请求?简单理解就是App端每隔一定的时间重复请求的操作就叫做轮训请求 , 比如:App端每隔一段时间上报一次定位信息 , App端每隔一段时间拉去一次用户状态等 , 这些应该都是轮训请求 。比如 , 电商类项目 , 某个抽奖活动页面 , 隔1分钟调用一次接口 , 弹出一些获奖人信息 , 你应该某个阶段看过这类轮询操作!具体优化操作长连接并不是稳定的可靠的 , 而执行轮训操作的时候一般都是要稳定的网络请求 , 而且轮训操作一般都是有生命周期的 , 即在一定的生命周期内执行轮训操作 , 而长连接一般都是整个进程生命周期的 , 所以从这方面讲也不太适合 。建议在service中做轮询操作 , 轮询请求接口 , 具体做法和注意要点 , 可以直接看该项目代码 。看app包下的LoopRequestService类即可 。大概思路:当用户打开这个页面的时候初始化TimerTask对象 , 每个一分钟请求一次服务器拉取订单信息并更新UI , 当用户离开页面的时候清除TimerTask对象 , 即取消轮训请求操作 。
推荐阅读
- 探索 Android 内存优化方法
- MySQL:常用的30种SQL查询语句优化方法
- 2019年seo动态网页优化“指南针”
- 微信小程序页面传值、组件间通信总结
- 资深架构师总结:彻底搞懂NIO效率高的原理
- 老司机总结雨刮器功能,除了刮玻璃,还有这4个,你知道几个?
- SEO优化和SEM对比的优势体现
- 中继器、集线器、网桥、交换机、路由器、网关的超全总结
- 网友总结户外知识:疲劳防护和体能恢复
- 各种排序算法总结
