• Android_使用StrictMode 调试开发


    1.StrictMode简单介绍

    自Android 2.3提供一个称为严苛模式(StrictMode)的调试特性,Google称该特性已经使数百个Android上的Google应用程序受益。那它都做什么呢?它将报告与线程及虚拟机相关的策略违例。一旦检測到策略违例(policy violation),你将获得警告,其包括了一个栈trace显示你的应用在何处发生违例。

    你能够强制用警告取代崩溃(crash),也能够仅将警告计入日志,让你的应用继续运行。


    2.ThreadPolicy类型

    和线程相关,它主要针对主线程(或UI线程)。因为在主线程中读写磁盘和进行网络訪问都不是好的做法,Google已经在磁盘和网络代码中加入了严苛模式(StrictMode)钩子(hook)。假设你对某个线程打开严苛模式(StrictMode),当那个线程进行磁盘和网络訪问。你将获得警告。

    你能够选择警告方式。

    一些违例包括用户慢速调用(custom slow calls 这么翻译行吗?),磁盘读写。网络訪问。

    你能选择将警告写入LogCat,显示一个对话框,闪下屏幕,写入DropBox日志文件,或让应用崩溃。最通常的做法是写入LogCat或让应用崩溃。

    check "read/write disk", "access network" and "show call" in thread

    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  
    	.detectDiskReads()  
    	.detectDiskWrites()  
    	.detectNetwork()  
    	.penaltyLog()  
    	.build());


    3.VmPolicy类型

    另一种虚拟机策略(VmPolicy)。能检查内存泄漏,譬如,当关闭一个SQLite对象前的完结操作,或其它不论什么类似可关闭对象在关闭前的完结操作。虚拟机策略(VmPolicy)由一个类似的Builder类创建.和线程策略(ThreadPolicy)不同的是。虚拟机策略(VmPolicy)不能通过一个对话框提供警告。

    check leaks for "cursor", "close method", "activity instance", "object instance" and "registration" in process

    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()  
       .detectLeakedSqlLiteObjects()  
       .penaltyLog()  
       .penaltyDeath()  
       .build());  


    4.使用实例

    public class UILApplication extends Application {
    	@TargetApi(Build.VERSION_CODES.GINGERBREAD)
    	@SuppressWarnings("unused")
    	@Override
    	public void onCreate() {
    		if (DEVELOPER_MODE && Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
    			StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyDialog().build());
    			StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyDeath().build());
    		}
    	
    		super.onCreate();
    	}
    }

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    基于 HTML5 + WebGL 的 3D 风力发电场
    基于HTML5 WebGL的工业化3D电子围栏
    基于 HTML5 WebGL 和 VR 技术的 3D 机房数据中心可视化
    基于 HTML5 Canvas 的 Web SCADA 组态电机控制面板
    基于 HTML5 WebGL 与 WebVR 3D 虚拟现实的可视化培训系统
    基于 HTML5 WebGL 的 3D 服务器与客户端的通信
    什么是 SUID, SGID 和 Sticky bit
    贝塞尔曲线切割圆角
    iOS-获取当前View所在的控制器
    block(八)作用域
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4614580.html
Copyright © 2020-2023  润新知