android StrictMode严苛模式

sancaiodm Android应用 2021-09-22 1424 0
StrictMode一般用于线下检测,可以在应用的Application、Activity或者其他应用组件的onCreate方法中加入检测代码

 if (DEBUG_STRICT_MODE) {
            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  //一个针对线程
                    .detectDiskReads()
                    .detectDiskWrites()
                    .penaltyFlashScreen()    //屏幕闪烁提示,
                    .penaltyDialog()            //弹出违规提示框
                    .detectNetwork()   // or .detectAll() for all detectable problems
                    .penaltyLog()   //penaltyLog()表示将警告输出到LogCat
                    .build());
            StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()  // 一个针对虚拟机
                    .detectLeakedSqlLiteObjects()
                    .detectLeakedClosableObjects()
                    .detectActivityLeaks()             //检测Activity泄露
                    .penaltyLog()       //penaltyLog()表示将警告输出到LogCat
                    .penaltyDeath()     //表示直接Crash掉当前应用程序
                    .build());
        }

使用StrictMode之后,系统会自动检测出来主线程当中一些违例的情况并的logcat中打印出来,同时按照配置给出相应的反应。它主要用来检测两大问题,一个是线程策略,另一个是虚拟机策略,

打印Log示例:

12-19 17:28:54.226 2729-2729/? D/StrictMode: StrictMode policy violation; ~duration=44 ms: android.os.StrictMode$StrictModeNetworkViolation: policy=63 violation=4

            at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1123)





StrictMode 还一个更直观的使用方法,进入开发者选项中开启严格模式,在开启之后如果主线程中有执行时间长的操作,屏幕则会闪烁。image.png

评论