A.StrictMode Android StrictMode意思为严格模式,是用来检测程序中违例情况的开发者工具。最常用的场景就是检测主线程中本地磁盘和网络读写等耗时的操作。
StrictMode原理: 其实StrictMode实现原理也比较简单,以IO操作为例,主要是通过在open,read,write,close时进行监控。libcore.io.BlockGuardOs文件就是监控的地方。
如何使用
** onCreate(){ StrictMode.setThreadPolicy(newStrictMode.ThreadPolicy.Builder() .detectAll().build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectAll().build()); ... } **在Activity, Application的onCreate中添加上述方法,即可。
严格模式主要检测两大问题,一个是线程策略,即TreadPolicy,另一个是VM策略,即VmPolicy。 ThreadPolicy 线程策略检测的内容: 自定义的耗时调用 detectCustomSlowCalls() 磁盘读取操作 detectDiskReads() 磁盘写入操作 detectDiskWrites() 网络操作 detectNetwork()
VmPolicy 虚拟机策略检测的内容有 Activity泄露 使用detectActivityLeaks()开启 未关闭的Closable对象泄露 使用detectLeakedClosableObjects()开启 泄露的Sqlite对象 使用detectLeakedSqlLiteObjects()开启 检测实例数量 使用setClassInstanceLimit()开启
B.Debug工具 在需要开始跟踪的地方加入 Debug.startMethodTracing(“file path”); 最终在停止调试的地方加入 Debug.stopMethodTracing(); 最终在sdcard上生成的debug文件我们可以用sdk/tools中的traceview来查看运行的结果。 但是,这两个只是Debug中的两个方法,还有其他很多方法可以从源码中看到,例如:
** ... int getThreadGcInvocationCount() void resetThreadGcInvocationCount() void resetAllCounts() ... **上述两种方法,直接可以写在代码中作为程序性能的监控,如果你要看更直观的一些性能信息可以通过DDMS工具的monitor进行数据的实时监控。至于使用什么样的方式,我觉得可以根据实际情况而定。如果后续发现还有其他的优化方式,我会继续备注。
网络优化 网络优化主要体现在设备和服务器之间的信息交互的过程,由于网络情况的不确定性,性能开销和网络请求的时间过长的情况。我们需要尽可能要减少网络交互的次数。那么,怎么样去合理利用网络请求呢? 1.分优先级,延迟部分请求。 2.合并请求,如果两次请求的数据可以通过一次请求拿到,那么就可以合并处理。 3.本地缓存数据,来减少网络请求。 4.减小请求数据的大小,适当的进行压缩。
推荐链接: Google 优化笔记1 Google优化笔记2 Google优化笔记3 Google优化笔记4