.build());

当然,以上代码只应在未发布上线的测试版本的应用中运行以方便监视相关的运行情况,当在生产版本上时不应该启用strictmode。因此,最佳的代码实践应该为如下的样子:

public void onCreate() {       if (DEVELOPER_MODE) {

StrictMode.setThreadPolicy( new StrictMode.ThreadPolicy.Builder()

.detectDiskReads()

.detectDiskWrites()

.detectNetwork()

.penaltyLog()

.build());

}

super.onCreate();

}

第二步 运行strictmode

当应用启用了strictmode模式时,其实跟普通的应用没什么两样,在测试和运行时,跟平时运行普通应用程序一样就可以了。当启用了Strictmode模式时,会监视所有的程序运行情况,当发现出现重大问题或违背策略规则时,会提示用户。下面是当运行启用了strictmode模式的应用时,当发现违背规则时,显示给用户的信息,细心观察下跟普通的出错信息有什么不同吧。

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ): StrictMode policy violation; ~duration = 319 ms: android.os.StrictMode$StrictModeDiskWriteViolation: policy = 31 violation = 1

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.os.StrictMode$AndroidBlockGuardPolicy.onWriteToDisk(StrictMode.java: 1041 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java: 219 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java: 83 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java: 1829 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java: 1780 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at com.mamlambo.tutorial.tutlist.data.TutListProvider.update(TutListProvider.java: 188 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.content.ContentProvider$Transport.update(ContentProvider.java: 233 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.content.ContentResolver.update(ContentResolver.java: 847 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at com.mamlambo.tutorial.tutlist.data.TutListProvider.markItemRead(TutListProvider.java: 229 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at com.mamlambo.tutorial.tutlist.TutListFragment.onListItemClick(TutListFragment.java: 99 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.support.v4.app.ListFragment$ 2 .onItemClick(ListFragment.java: 53 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.widget.AdapterView.performItemClick(AdapterView.java: 282 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.widget.AbsListView.performItemClick(AbsListView.java: 1037 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.widget.AbsListView$PerformClick.run(AbsListView.java: 2449 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.widget.AbsListView$ 1 .run(AbsListView.java: 3073 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.os.Handler.handleCallback(Handler.java: 587 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.os.Handler.dispatchMessage(Handler.java: 92 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.os.Looper.loop(Looper.java: 132 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at android.app.ActivityTh 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 read.main(ActivityThread.java: 4123 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at java.lang.reflect.Method.invokeNative(Native Method)

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at java.lang.reflect.Method.invoke(Method.java: 491 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 841 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 599 )

09 - 04 16 : 15 : 34.592 : DEBUG / StrictMode( 15883 ):     at dalvik.system.NativeStart.main(Native Method

并且会出现提示窗口提示用户:

忽略某些规则

应该说大部分由StrictMode产生的规则警示都应去遵守,但有时也不是所有产生的信息都表明你的程序有错误。比如,在应用程序的主线程中去快速读写磁盘其实不会对应用的性能产生太大的影响,又或者你在调试程序阶段有一些调试的代码违反了设定的规则,这些都可以忽略掉这些规则。

忽略规则有两种方法,一种是单纯在代码中把Strictmode的代码注释掉,另外一种比较好的方法是,在需要忽略的时候和地方,增加相应的代码去让系统停止使用这些规则去检查,等开发者认为有必要检查时,再重新应用这些规则,比如:

StrictMode.ThreadPolicy old = StrictMode.getThreadPolicy();

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder(old)

.permitDiskWrites()

.build());

doCorrectStuffThatWritesToDisk();

StrictMode.setThreadPolicy(old);

这里首先用old来保存了当前的策略规则,然后doCorrectStuffThatWritesToDisk();

Android中的StrictMode简介相关推荐

  1. android build.ninja,Android中的Ninja简介

    Android中的Ninja简介 2017-08-15 16:49:42 +08 字数:2671 标签: Android Makefile Ninja 如果说Makefile是一个DSL,那么Ninj ...

  2. 在Android中使用FlatBuffers - 简介

    JSON - 可能每个人都知道这个轻量的数据格式几乎被用在了所有的现代服务器中.相对于过去流行的一些东西,如可怕的XML,它更轻量,更可读,对开发更友好.JSON是语言独立的数据格式,但解析和格式转化 ...

  3. Android 中的多线程简介

    一.概念讲解 进程:是程序运行过程中系统进行资源分配和调度的一个独立单位,使多个程序可 并发执行,以提高系统的资源利用率和吞吐量. 线程:一个基本的CPU执行单元 & 程序执行流的最小单元. ...

  4. strictmode android,Android中的StrictMode

    StrictMode.ThreadPolicy public static final class StrictMode.ThreadPolicy extends Object java.lang.O ...

  5. android 蓝牙相关的类,Android中BluetoothAdapter类简介

    一. BluetoothAdapter类介绍 BluetoothAdapter类简单点来说就是代表了本设备(手机.电脑等)的蓝牙适配器对象,通过它我们可以蓝牙设备进行基本 开发了,主要有如下功能: 1 ...

  6. 【Android 安装包优化】Android 中使用 SVG 图片 ( SVG 矢量图简介 | Android 中生成 Vector 矢量图资源 )

    文章目录 一.SVG 矢量图简介 二.Android 中生成 Vector 矢量图资源 三.参考资料 一.SVG 矢量图简介 Android SVG 参考文档 : https://developer. ...

  7. Android中ADB-server、ADB-client和adbd的简介

    Android中ADB-server.ADB-client和adbd的简介 来源 AI 时间 1年前     本站文章,部分收集于互联网,若有侵权问题敬请告知,谢谢 本文主要是介绍Android中An ...

  8. android中SELINUX规则分析和语法简介

    点击打开链接 1. SELINUX是可以理解为一种Android上面的安全机制,是有美国国家安全局和一些公司设计的一个针对linux的安全加强系统 我们可以通过配置SELINUX的相关policy,来 ...

  9. Android中三种常用解析XML的方式(DOM、SAX、PULL)简介及区别

    XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解 ...

最新文章

  1. 什么是schema?
  2. python函数加括号于不加括号的区别
  3. JAVA基础学习大全(笔记)
  4. 使用Combres 库 ASP.NET 网站优化
  5. Android官方开发文档Training系列课程中文版:线程执行操作之创建多线程管理器
  6. 127.Word Ladder
  7. 【Spring】Spring 自动注入(autowire)详解
  8. 隐马尔可夫模型(HMM)****
  9. windows 搭建简单c++环境【mingw】
  10. JavaEE 使用Filter实现敏感词汇过滤器
  11. 计算机运行命令定时关机,电脑定时关机命令 使用系统命令定时关机 - 云骑士一键重装系统...
  12. 计算机主板 也叫系统版,电脑主板是什么
  13. CrossApp 设置App启动页(无任何黑屏白屏,显示完启动画面之间到显示出首页界面)
  14. 原油期货开户条件和流程是什么?
  15. 开源项目ruoyi-springboot-vue源码分析之LogAspect日志打印
  16. jQuery对象,jQuery查找标签,层级选择器,属性选择器,表单筛选器,操作节点标签事件...
  17. 开学数码装备分享,大学新生必备数码好物
  18. 对VC 一些常见问题的整理
  19. Git版本控制的使用
  20. 软件开发项目可行性分析报告样例

热门文章

  1. ExtractFileDrive、ExtractFilePath、ExtractFileDir、ExtractFileName、ExtractFileExt、ExtractRelativePath
  2. Hadoop架构及各组件介绍
  3. 题目3:文本文件单词的检索与计数(代码实现)
  4. 【解决方案】印刷包装企业数字化转型方案,助力行业突围
  5. MATLAB与SolidWorks联合仿真
  6. SSM实战项目_青橙商城学习笔记和踩坑指南
  7. 【python】UI自动化-uiautomation
  8. 红米k30鸿蒙系统,犹豫不决!红米K40系列基本确认,红米K30S还要不要买?
  9. 同一界面画出多个QQ图(R语言)
  10. 超详细图文保姆级教程:App开发新手入门(五)