Android性能调优——严苛模式StrictMode

前情提要

由于在demo中涉及了在主线程的网络操作,当时在开发时仅简单搜索了相关异常的处理方法,于是书写了以下代码:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy
											   .Builder()
											   .permitAll()
											   .build();  
StrictMode.setThreadPolicy(policy); 

这段代码很好的解决了抛异常的问题,但当时并未深究。现在重新审视代码,我认识到这只是将问题隐藏了起来,于是决定研究一下Android中的严苛模式,便有了本文。

什么是严苛模式?

让我们看看Android官方文档中给出的定义:

StrictMode is a developer tool which detects things you might be doing by accident and brings them to your attention so you can fix them.

这段话的意思是说:严苛模式是一个开发人员工具,它检测您可能意外做的事情,并提请您注意,以便您可以修复它们。‎
原来严苛模式就是一个供开发人员使用的“地雷探测器”。那它可以探测出哪些“地雷”呢?让我们再来看看Android官方文档中的解释:

StrictMode is most commonly used to catch accidental disk or network access on the application’s main thread, where UI operations are received and animations take place. Keeping disk and network operations off the main thread makes for much smoother, more responsive applications. By keeping your application’s main thread responsive, you also prevent ANR dialogs from being shown to users.

这段话的意思是:‎"严格模式"最常用于捕获应用程序主线程上的意外磁盘或网络访问,其中接收了 UI 操作并进行了动画。将磁盘和网络操作远离主线,使应用程序更顺畅、响应更灵敏。通过保持应用程序的主要线程响应,您还可以防止‎‎ANR 对话‎‎显示给用户。‎

举个例子来说,如果开发者在UI线程中进行了网络操作或者文件系统的操作,而这些缓慢的操作会严重影响应用的响应能力,甚至出现ANR对话框。而为了在开发中发现这些容易忽略的问题,我们使用严苛模式,在系统检测出主线程违例的情况会做出相应的反应,如日志打印,弹出对话框亦或者崩溃等。换言之,严格模式会将应用的违例细节暴露给开发者方便优化与改善。

严苛模式具体检测的是什么呢?

总的来说,严苛模式主要检测两大问题,一个是线程策略,即TreadPolicy,另一个是VM策略,即VmPolicy

ThreadPolicy线程策略检测:

  • 自定义的耗时调用 使用detectCustomSlowCalls()开启
  • 磁盘读取操作 使用detectDiskReads()开启
  • 磁盘写入操作 使用detectDiskWrites()开启
  • 网络操作 使用detectNetwork()开启
  • 如果你想关闭某一项检测,可以使用对应的permit*方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值