在项目中通过StrictMode我解决了很多效率问题,今天有空,有必要记录一下。
StrictMode是一种通过事故来吸引你的注意及发现你可能需要优化问题的一种开发者工具。
StrictMode通常用于抓取在应用程序的主线程中来操作磁盘或者网络访问的问题,比如界面操作和动画,在非UI线程中处理磁盘文件和网络操作使得程序更快、响应更及时,在保证你的程序足够流程的同时,你还需要组织ANR事件的发生。
下面是启用StrictMode的实例,最好尽早启用它,比如在应用程序、窗口或者其它应用程序组件的onCreate()方法中调用它:
public void onCreate() {
if (DEVELOPER_MODE) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
}
super.onCreate();
}
你可以决定当一个异常发生时该发生什么样的事情,比如,使用StrictMode的penaltyLog()方法你可以在应用发生异常时查看adb logcat的输出。
当你发现一个比较严重的异常时,Android提供了一系列的工具来解决它:线程、Handler、AsyncTask、IntentService等等。但并不是StrictMode报的所有问题都需要修复,特别是很多必须要在窗口生命周期回调中访问磁盘的时候。使用严苛模式可以帮你解决很多问题,比如在UI线程中访问网络始终是一个问题。
更多介绍参见:http://www.oschina.net/search?scope=all&q=StrictMode