Android Studio StrictMode

2022-08-14 13:19:29 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

最近接手一个新项目,研究下代码,并学习其中一些好的地方。比如今天发现运行app以后会有log 显示 StrictMode相关信息,通过查看代码,我发现在 某Activity 中使用了 StrictMode 的一些功能,老实说,StrictMode我在手机的开发者选项中有见到过,enable以后用过几分钟……尝鲜,但是代码里面从来没用过这个功能,从来没用过

他主要是检测 线程&虚拟机 相关的违例情况,比如磁盘操作、网络访问等。详情阅读官方文档StrictMode

我目前比较关心两件事:

1.在什么时候用;

2.怎么用。

关于1,这个功能是协助开发者开发产品的时候给自己“找茬”的,适用于开发阶段使用,release版本不建议打开相关功能。可以设置一个boolean变量,根据这个变量的值来enable或disable StrictMode。关于这个boolean值,在android studio的gradle中有个功能很有用,如下代码所示:

代码语言:javascript复制
    buildTypes{
        releaseName{
            debuggable false
        }
        debugName{
            debuggable true
        }
    }

在类中 可以通过读取相关值来确定当前是否是debug版本,并作出相应策略。ps:debuggable属性不是必须设置的,debug版本下其默认是true,release版本下,其默认是false

关于2,主要是要搞懂监测规则的设置,android的规则不止一点,可由开发者自己决定StrictMode要监测的规则,可以仅仅检测网络相关,也可以检测所有规则。

项目中是这么用的:在Activity 或者Application 的onCreate中调用相关功能。其一般是有两个set方法,分别对应 线程&vm 摘了一段代码如下所示:

代码语言:javascript复制
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  
    .detectDiskReads()  
    .detectDiskWrites()  
    .detectNetwork()  
    .penaltyLog()  
    .build());
代码语言:javascript复制
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()  
    .detectLeakedSqlLiteObjects()  
    .penaltyLog()  
    .penaltyDeath()  
    .build()); 

可以在android studio里面查看或者看官网的文档(sdk里面这个类挺长的,看得我好累啊)。其实这个StrictMode我之所以用得少,主要是因为项目的框架搭建完以后,线程方面不会出问题的,数据库相关操作也都封装好了,网络也是。而且现在各种开源库流行起来,开发者自己造轮子的机会不是很多,所以用的就少了,不过,存在即合理,了解一下还是有用的,也就几行代码的事,随手写出来测试下app找出问题也是极好的。

今天就是简单看了一下StrictMode.java,算上注释,一共2000 行,找时间我要再仔细看下。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/132860.html原文链接:https://javaforall.cn

0 人点赞