Android无法优化应用,Android应用优化总结
原标题:Android应用优化总结
内存泄漏
最常见也是最严重的 :持有Activity 与Context引用,生命周期本该短于应用生命周期,该回收的没被回收掉,导致泄露
检测手段:leakcanary mit等
Handler泄露
new Handler 替换为 静态内部类
将持有当前Activity或Context 对象实例化为WeakReference对象
onDestory 时:handler.removeAllMessageAndCallback(null)
高级方案:仍采用静态内部类,提供CallBack,独立于使用者,避免Activity与Context直接引用
单例泄露
持有的Activity 使用WeakReference ,Context 使用ApplicationContext
去除不必要的Activity引用
泄露不止是Activity 与context,一旦持有比应用生命周期短的其他对象,也会发生泄露
此时需要考虑使用WeakReference
Fragment 之间静态属性引用 泄露
消灭静态属性
静态属性会一直持有当前Activity或Context引用
Fragment之间通讯可使用接口,Activity实现该接口, onAttach 将Activity转换为接口对象
Activity操作Fragmeng方式不变
高级方案:可使用MVVM ,ViewModel方式
Cursor 等游标、流的关闭
数据库操作:增删改查的游标,文件、网络操作流
用后close
List
onDestory销毁List:clear
WebView
onDestory销毁WebView :removeJava、removeAllView
高级方案:多进程
避免原则
尽可能保证持有的对象及时被回收,必须使用Activity的采用WeakReference,能使用ApplicationContext的不使用 当前Context
其他对象生命周期短于应用的,一旦持有了Context或Activity都有可能发生泄露,尽可能采用WeakReference
代码优化 优化的数据结构
HashMap 替换为SparseArray 等
枚举、匿名内部类、反射等
减少使用
布局,涉及过渡绘制等 背景
窗体背景,多余背景,减少过渡绘制有效手段
过渡绘制
include标签(通常用于公共布局组件)、merge(有效减少层级,但会出现不可控因素,属性失效等问题)、viewsub
减少不必要的层级
控件优化
比较突出的:
ImageView 与TextView 呈上下左右关系时,优先考虑
TextView增加drawable属性,即compoundDrawable
布局设置:drawableLeft ,drawableTop, drawableRight,drawableBoottom
图片文字间距使用:drawablePadding
代码设置:setCompoundDrawablesRelativeWithIntrinsicBounds(left,top,right,bottoom)
内存、网络、电池
BitMap的回收,应用不可见的监听,减少app被系统关闭的几率
安装包与第三方
无用资源,大图,图片适配,减少不必要的图片,png替换为.9,简单图片代码实现优先
lib 文件
架构
业务、实现分离
MVP或MVVM等
viewmodel
代码规则:命名,方法数,自解释
目的:便于维护
流程
测试环节
如:用例覆盖,情景覆盖,功能效果与产品需求匹配度等,数据抓取,可考虑以下方案增强
全员测试
开发阶段:
由开发把控,确认主要流程功能完成后打包安排测试,主要为产品确认功能实现情况,及时发现问题,以免后期不断产生功能修改,耽误开发进度
测试阶段:
除测试外所有相关人员,包括但不限于:前后端开发、产品、项目负责人
上线前:
最后的问题发现修改阶段,也是最后的问题修改阶段,避免上线前后发生重大问题
测试次数:
问题修改完一批次之后统一回归,可分为第一轮至第三轮甚至四轮,根据测试及bug情况安排,除第一轮外后续皆主要为回归,最后一轮进行线上环境测试,确认功能与稳定性,正式上线前可考虑发布小范围用户安装包进行用户实际环境测试,俗称灰度
测试用例
测试拿到需求之后可编写测试用例,此用例可指导其他人进行功能验证,减少测试人员压力
目的:控制bug数量,减少测试费时,尽可能的发现隐藏的问题,避免上线后发生重大事故
提升项目质量
数据抓取
可使用Charles,Fiddler
数据类问题可直接由bug测出人员定位,避免其他人浪费时间定位
版本分离
bug分离
上线后的bug确认是否为重大bug是否需要修改,一旦确认可下期修改,则可列为后期版本优先修改内容
api分离
最基本的数据稳定性保持方法
api上线时,安装包未必会及时被上传,此时线上环境已经发生变动,而用户所用仍为老版本,一旦数据不兼容,用户无法正常使用
api可根据app的versioncode与平台等多参数进行数据隔离
问题监测
主要为稳定服务
手段包括但不限于:
真实用户实时崩溃日志:百度等
内嵌的日志收集上传功能
后台统计与收集
开发阶段的崩溃收集:崩溃截取显示上传功能
开发阶段
编写高质量代码
性能优化
leakcanary 内存泄露
findbug bug 、隐藏问题
removed unused resoures 剔除废弃资源
lint 找出隐藏问题,优化代码,重点关注Performance 如泄露,Correctness,Security
大家都在看
805941275 435399051返回搜狐,查看更多
责任编辑:
Android无法优化应用,Android应用优化总结相关推荐
- 对Android 开发者有益的 40 条优化建议(转)
下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激 ...
- android源代码居中字体,Android (布局优化) TextView实现drawable图标大小 位置与第一行文本居中...
先看大众点评的购买须知 大众.png 如上图,需求在每条提示语句前加一个小圆点,我刚看到需求就想到用 android:drawableLeft 来做,可做完发现:当TextView内容为单行的时候是没 ...
- Android优化五:布局优化
1.减少布局层级 Google在API文档中建议View树的高度不宜超过10层. 以前我们用Eclipse写代码时,自动生成的模板是以LinearLayout为根节点的,但是后面变成了Relative ...
- android布局优化方案,Android启动优化-布局优化
Android启动优化-布局优化 安卓应用开发发展到今天,已经成为一个非常成熟的技术方向,从目前的情况看,安卓开发还是一个热火朝天的发展,但高级人才却相对较少,如今移动互联网的开发者也逐渐开始注重插入 ...
- 【Android 安装包优化】Android 中使用 SVG 图片 ( Android 5.0 以下的矢量图方案 | 矢量图生成为 PNG 图片 )
文章目录 一.Android 5.0 以下的矢量图方案 二.矢量图生成为 PNG 图片 三.完整的 build.gradle 构建脚本 四.编译效果 五.参考资料 一.Android 5.0 以下的矢 ...
- 【Android CPU 优化】Android CPU 调优 ( Trace 文件分析 | Android Profiler 工具 | CPU Profiler 工具 )
文章目录 一.Android CPU 优化 二.CPU Profiler 工具 三.相关资源 一.Android CPU 优化 在 Android 中 , 出现 动画掉帧 , 页面切换白屏 , 卡顿 ...
- 【Android 安装包优化】Android 中使用 7zr 可执行程序 解压缩文件
文章目录 一.Android 中使用 7zr 可执行程序 解压缩文件 二.完整代码示例 三.参考资料 一.Android 中使用 7zr 可执行程序 解压缩文件 在上一篇博客 [Android 安装包 ...
- 【Android 安装包优化】Android 中使用 7zr 可执行程序 压缩文件
文章目录 一.Android 中使用 7zr 可执行程序压缩文件 二.完整代码示例 三.参考资料 一.Android 中使用 7zr 可执行程序压缩文件 在上一篇博客 [Android 安装包优化]A ...
- 【Android 安装包优化】Android 应用中 7zr 可执行程序准备 ( Android Studio 导入可执行 7zr 程序 | 从 Assets 资源文件拷贝 7zr 到内置存储 )
文章目录 一.Android Studio 导入可执行 7zr 程序 二.从 Assets 资源文件拷贝 7zr 到内置存储空间 三.参考资料 一.Android Studio 导入可执行 7zr 程 ...
- 【Android 电量优化】电量优化 ( Battery Historian 环境要求 | 电量分析报告 | 电量优化三原则 | 电量优化注意事项 )
文章目录 一.Battery Historian 环境要求 二.上传电量报告 三.Battery Historian 电量分析报告 四.电量优化三原则 五.电量优化注意事项 参考 Google 官方文 ...
最新文章
- 性能优化工具 MVC Mini Profiler
- 一套基于 SpringBoot 的完整高并发电商系统,拿去面试简直不要太好用!
- linux网络命令1
- const pointer
- 完成AOP 顶层设计-JoinPoint
- 数据挖掘基础数学知识博客
- b区计算机复试国家线,2020研究生考试国家线A区B区有什么区别
- JavaScript重难点解析1(数据类型——var、let、const区别,类型补充,“===”、“typeof”、“instanceof”区别,Symbol数据类型)
- Android View onVisibilityChanged onAttachedToWindow onDetachedFromWindow
- 求极限简单总结 (基础)
- netty权威指南 微云_Netty权威指南 第2版.pdf
- windows nginx 搭建 图片服务器
- (转)隐藏在生活里的量化投资密码
- ppi 各代iphone_iPhone全机型尺寸分辨率PPI大全
- RT-Preempt笔记
- Biotin-PEG2k-NHS,Biotin-PEG2000-NHS,PEG衍生物
- 益智java单词游戏_java实现单词搜索迷宫游戏
- 天的各种书法_你可知道书法里的各种关系?
- C++ string类模板
- 从Npm Script到Webpack,6种常见的前端构建工具对比
热门文章
- AutoML 与 Bayesian Optimization 概述
- 现代程序设计 作业 第1次
- 怎么查看父子级目录linux,如何查找linux中特定父目录的所有文件?
- python tkinter控件_python tkinter 控件与布局 项目实战
- 无法打开虚拟机“Ubuntu2” (D:\software\Ubuntu2.vmx): 未找到文件。 是否从库中移除“Ubuntu2”?
- 冯提莫在B站的受欢迎度
- vlan为什么能隔离广播域_路由交换技术-VLAN原理及配置
- windows。forms.timer设置第一次不等待_面试官:换人!他连 TCP 这几个参数都不懂(一)...
- hive left outer join 子查询临时表_基于历史数据的用户访问次数,每天新老用户,日活,周活,月活的hive计算...
- 计算机鼠标装有,计算机鼠标装有传感器来监视鼠标的移动情况,如图