1.什么是Android性能优化?
性能优化:可以从界面、apk瘦身、混淆说起,也可以从dex分包处理,插件化动态加载模块,开屏冷启动说起
界面优化:多可以使用include、merge、ViewStub、约束布局来做起,include可以提取公共的布局,merge可以减少布局层次、ViewStub是使用的时候才去创建View,减少空间的占用、约束布局一来可以减少布局的层次、二来可以提高开发的效率,在自定义view中注意view绘制过程不要做初始化的操作,一般放到view的初始化的方法里面。
apk瘦身:可以用android studio的lint检测工具检测资源文件等
混淆:可以起到文件大小减少的作用,这个在实践中可以尝试,混淆后可以反编译看看apk包的内容
dex分包:主要是apk包的结构发生了变化,如果dex包的方法数超过了最大数,需要进行分包处理
插件化:主要用到了java中动态代理模式和反射的思想,利用android的activity启动流程,通过动态代理模式动态加载我们需要插件化的activity
开屏冷启动:开屏冷启动主要针对MultiDex启动做优化,在5.0之前对dex分包是不做处理的,所以要兼容到低版本的时候需要使用MultiDex.install做兼容。而MutiDex.install将apk中的dex包获取到,然后又压缩成对应的zip文件,将dex文件通过反射转换成DexFile对象、反射替换数组。所以我们能做的优化可以通过判断如果jvm不支持dex分包处理,通过MutiDex.install做处理,通过监听MutiDex.install开启一个监听MutiDex.install的进程activity。等到MutiDex.install处理完成后,再来处理正常的逻辑。
2.Android性能优化
1.布局优化: 减少布局层级,使用ViewStub提高显示速度,布局尽可能少使用wrap_content,删除控间中无用的属性,避免过度绘制,移除window默认背景,按需显示展位图,自定义View优化,使用canvas.clipRect()识别可见区域
2.启动速度:采用分布加载,异步加载,延期加载提高应用初始化速度,采用线程初始化数据等,合理的刷新机制
3.内存方面:防止内存泄露,使用一些第三方工具检测解决
4.代码优化:遵循Java生命周期5.安装包优化:删除无用资源,优化图片,代码混淆,避免重复库存在,插件化
3.如何对 Android 应用进行性能分析
如果不考虑使用其他第三方性能分析工具的话,我们可以直接使用 ddms 中的工具,其实 ddms 工具已经非常的强大了。ddms 中有 traceview、heap、allocation tracker 等工具都可以帮助我们分析应用的方法执行时间效率和内存使用情况。
Traceview 是 Android 平台特有的数据采集和分析工具,它主要用于分析 Android 中应用程序的 hotspot(瓶颈)。Traceview 本身只是一个数据分析工具,而数据的采集则需要使用 AndroidSDK 中的 Debug 类或者利用 DDMS 工具。
heap 工具可以帮助我们检查代码中是否存在会造成内存泄漏的地方。
allocation tracker 是内存分配跟踪工具
4.Android 中如何捕获未捕获的异常
1.UncaughtExceptionHandler
自 定 义 一 个 Application , 比 如 叫 MyApplication 继 承 Application 实 现UncaughtExceptionHandler。
覆写 UncaughtExceptionHandler 的 onCreate 和 uncaughtException 方法。 注意:上面的代码只是简单的将异常打印出来。在 onCreate 方法中我们给 Thread 类设置默认异常处理handler,如果这句代码不执行则一切都是白搭。在 uncaughtException 方法中我们必须新开辟个线程进行我们异常的收集工作,然后将系统给杀死。
在 AndroidManifest 中配置该 Application:
2.Bug 收集工具 Crashlytics
Crashlytics是专门为移动应用开发者提供的保存和分析应用崩溃的工具。国内主要使用的是友盟做数据统计。
Crashlytics的好处:
1.Crashlytics不会漏掉任何应用崩溃信息。
2.Crashlytics可以象Bug管理工具那样,管理这些崩溃日志。
3.Crashlytics可以每天和每周将崩溃信息汇总发到你的邮箱,所有信息一目了然。
5.谈谈你在工作中是怎样解决一个 bug
1.打印log信息,分析log日志 ;2.进行断点调试
6.怎样对 android 进行优化?
1.对 listview 的优化。
2.对图片的优化。
3.对内存的优化。
4.具体一些措施
5.尽量不要使用过多的静态类static
6.数据库使用完成后要记得关闭 cursor
7.广播使用完之后要注销