android 严苛模式,Android- 严苛模式(StrictMode)

写程序时,你应该始终假定下列两种情况:

网络很慢(你正在试图连接的服务器甚至可能没有响应);

文件系统的访问速度很慢。

结论就是,不应该在主线程内进行网络操作或访问文件系统,因为缓慢的操作会拖累系统的响应能力。虽然在开发环境中,你可能永远不会遇到任何网络问题或任何文件系统的性能问题,但用户可能不像你那么幸运。

注意 SD卡并不都具有相同“速度”,如果应用在很大程度上依赖外部存储设备的性能,那么你应该确保在来自不同制造商的各种SD卡上测试过你的应用。

Android有实用工具来帮助应用检测这类缺陷。它提供的StrictMode是检测不良行为的良好工具。通常情况下,在应用启动时,即当onCreate()被调用时,启用StrictMode,如代码清单1-15所示。

在应用中启用StrictMode

publicclassMyApplicationextendsApplication {

@Override

publicvoidonCreate () {

super.onCreate();

StrictMode.setThreadPolicy(newStrictMode.ThreadPolicy.Builder()

.detectCustomSlowCalls()// API等级11,使用StrictMode.noteSlowCode

.detectDiskReads()

.detectDiskWrites()

.detectNetwork()

.penaltyLog()

.penaltyFlashScreen()// API等级11

.build());

// 其实和性能无关,但如果使用StrictMode,最好也定义VM策略

StrictMode.setVmPolicy(newStrictMode.VmPolicy.Builder()

.detectLeakedSqlLiteObjects()

.detectLeakedClosableObjects()// API等级11

.setClassInstanceLimit(Class.forName("com.apress.proandroid.SomeClass",100)// API等级11

.penaltyLog()

.build());

}

}

StrictMode是Android

2.3引入的,在Android

3.0中加入了更多的功能,所以应该确保选择了正确的Android版本,让代码跑在适当的Android平台上,如代码清单1-12所示。

Android

3.0中引入的需要特别留意的方法包括detectCustomSlowCall()和noteSlowCall(),它们都是用来检测应用中执行缓慢的代码或潜在缓慢的代码。代码清单1-16说明了如何将代码标记为潜在缓慢的代码。

代码清单1-16 标记潜在缓慢的代码

publicclassFibonacci {

publicstaticBigInteger computeRecursivelyWithCache(intn) {

StrictMode.noteSlowCall("computeRecursivelyWithCache");// 消息可以带任何信息

SparseArray cache = newSparseArray();

returncomputeRecursivelyWithCache(n, cache);

}

...

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值