«

Android的性能监控工具StrictMode

时间:2024-3-2 17:00     作者:韩俊     分类: Android


目前,StrictMode的能力与限制包括:
1.基于线程的对磁盘读写,网络操作,以及自定义耗时操作等的监控;
2.基于VM进程的对对象泄露(Activity对象,SQLite对象,未反注册对象,未关闭对象)的监控;
3.可以检测到跨进程的耗时操作(当然必须是同步操作);
4.当前不支持在jni中发生的网络与磁盘操作。
随着Android的进化,StrictMode的功能也将越来越强大。当StrictMode检测到指定的事件发生时,它以指定的方式通知你:崩溃,弹出对话框,闪屏,logcat,dropbox。

==========================
StrictMode是Gingerbread的一个新API,用来设置对一个thread的策略,你可以设置不允许在这个thread上执行的某些操作,并且设置对应的惩罚措施,如果出现不允许的操作的话。通过优雅的设计,这些策略可以通过一些整数很容易的指定。

目前有2种策略可用,第一个和线程相关,它主要针对主线程(或UI线程)。由于在主线程中读写磁盘和进行网络访问都不是好的做法,Google已经在磁盘和网络代码中添加了严苛模式(StrictMode)钩子(hook)。如果你对某个线程打开严苛模式(StrictMode),当那个线程进行磁盘和网络访问,你将获得警告。你可以选择警告方式。一些违例包含耗时函数,磁盘读写,网络访问。你能选择将警告写入LogCat,显示一个对话框,闪下屏幕,写入DropBox日志文件,或让应用崩溃。最通常的做法是写入LogCat或让应用崩溃。

penaltyLog()表示将警告输出到LogCat,你也可以使用其他或增加新的惩罚(penalty)函数,例如使用penaltyDeath()的话,一旦StrictMode消息被写到LogCat后应用就会崩溃。

类似于线程策略(ThreadPolicy) StrictMode 有虚拟机策略(VmPolicy)。虚拟机策略(VmPolicy)能检查内存泄漏,譬如,当关闭一个SQLite对象前的完结操作,或其他任何类似可关闭对象在关闭前的完结操作。虚拟机策略(VmPolicy)由一个类似的Builder类创建,如列表2-10所示。和线程策略(ThreadPolicy)不同的是,虚拟机策略(VmPolicy)不能通过一个对话框提供警告。

若需避免对某些违规的检测,譬如,你需要在正在监视的线程中进行磁盘读取。此时,你要么不去调用detectDiskReads(),要么在调用detectAll()之后跟一个permitDiskReads()。

线程策略监控的方面:
Disk Reads 磁盘读
Disk Writes 磁盘写
Network access 网络访问
Custom Slow Code 自定义的运行速度慢的代码分析

VM 策略监控的方面:
内存泄露的Activity对象
内存泄露的SQLite对象
内存泄露的释放的对象

标签: android

热门推荐