写道
ANR窗口产生的原因是多种多样的。程序的主线程因为IO读写或网络阻塞而导致被阻塞了,外部存储设备被独占了或系统负荷(load)过高(即不是自己编写的程序的问题,可能是系统或者其他第三方程序导致的问题),都有可能导致ANR窗口的出现。
从Android 2.3开始提供了一个新的类StrictMode,可以帮助开发者改进他们的Android应用,StrictMode可以用于捕捉发生在应用程序主线程中耗时的磁盘、网络访问或函数调用,可以帮助开发者使其改进程序,使主线程处理UI和动画在磁盘读写和网络操作时变得更平滑,避免主线程被阻塞,导致ANR窗口的发生。
下面简要说明下Android 2.3新特性StrictMode限制模式的工作方式,见下面的代码:
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // 这里可以替换为detectAll() 就包括了磁盘读写和网络I/O
.penaltyLog() //打印logcat,当然也可以定位到dropbox,通过文件保存相应的log
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects() //探测SQLite数据库操作
.penaltyLog() //打印logcat
.penaltyDeath()
.build());
注意:上述代码可以在Application的OnCreate中添加,这样就能在程序启动的最初一刻进行监控了。
分享到:
相关推荐
Android通过webservice连接SqlServer实例(Android4.0可运行)从原博http://blog.csdn.net/zhyl8157121/article/details/8169172下载下来的demo,看了评论和其它文章后修改,解决了Android2.3以上StrictMode模式下不...
"Android StrictMode严格模式的使用方法" Android StrictMode严格模式是一种调试特性,于Android 2.3中引入,旨在检测和报告线程及虚拟机相关的策略违例。通过使用StrictMode,可以很方便地检查Android应用程序的...
StrictMode是自Android 2.3(Gingerbread)版本起引入的一个功能,它作为开发者模式的一部分,为应用程序提供了一种检测和报告应用行为中潜在问题的机制。通过启用StrictMode,开发者可以监控并捕获应用在运行时可能...
StrictMode在Android 2.3(API 9)的时候就已经引入了,虽然到当前这个工具年代比较久远 了,但属实还是非常好用的, 在开发阶段使用这个工具,能够很好的帮助发现开发中的一系列不规范的编码, 例如主线程访问网络...
从Android 2.3开始,StrictMode类提供了此功能。 5. **移除调试代码**:在发布应用前,确保调试和诊断日志被禁用或最小化,因为它们会消耗性能。 6. **简洁的布局设计**:创建简单、直观的布局可以提高加载速度。...
24.4.5 使用语言方法 24.5 参考资料 24.6 小结 第25章 触摸屏 25.1 MotionEvent 25.1.1 MotionEvent 对象 25.1.2 回收MotionEvent 25.1.3 使用VelocityTracker 25.1.4 探索拖放操作 25.2...
4. **启用StrictMode**:从Android 2.3开始,开发者可以使用StrictMode检测主线程中的性能问题,如磁盘读写和网络访问,从而优化应用,确保UI的流畅性。 5. **发布前禁用或减少调试**:在应用发布之前,应移除或...
1.4.4 用DDMS截屏 1.4.5其他工具 1.5 结束语 第2章 创建第一个应用 2.1 创建一个应用 2.2 开始使用Android视图 2.3 排布视图2.3.1 FrameLayout 2.3.2 TableLayout 2.3.3 LinearLayout 2.3.4RelativeLayout 2.3.5 ...
24.4.5 使用语言方法 24.5 参考资料 24.6 小结 第25章 触摸屏 25.1 MotionEvent 25.1.1 MotionEvent 对象 25.1.2 回收MotionEvent 25.1.3 使用VelocityTracker 25.1.4 探索拖放操作 25.2...
它是自Android 2.3版本引入的,通过设置不同的策略,可以在开发过程中及时发现并修正错误。 #### 技巧5:清理调试和诊断代码 在发布前,彻底清理或最小化应用中的调试和诊断代码,避免不必要的资源消耗。这不仅能...
这里说有设计思想是我根据查看Android源代码提炼出来的代码逻辑,所以不会跟Google工程师的原始设计思想100%符合(也有可能是0%),... 代码如下:if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPo