Android开发响应检测及内存分析 - 【StrictMode】

原创 2015年07月08日 15:04:06

StrictMode

       在运行操作应用时候,如果应用出现卡顿、不流畅、甚至出现ANR。通常,100到200毫秒是一个让用户感觉到阻滞的阈值,作为开发者首先要想到的是在代码编写过程中是否在主线程中做了耗时的操作(硬件问题暂不考虑 )。

       假设这些细微的问题很难寻找,没关系。这里有些小技巧让你用来使你的应用看起来响应更灵敏。从Android 2.3开始提供了一个新的类StrictMode,并在后续的版本陆续增加新的更能。可以帮助开发者改进他们的Android应用,StrictMode可以用于捕捉发生在应用程序主线程中耗时的磁盘、网络访问或函数调用(简单理解就是哪里堵塞主线程就会捕捉到并打印出来),可以帮助开发者使其改进程序,避免主线程被阻塞、卡顿,甚至导致ANR的发生,使应用UI刷新显得更加平滑流畅。

StrictMode使用

兼容:

       考虑到有些App要兼容低版本,或者当前使用的SDK版本较低,没关系,StrictMode开发调试阶段改成2.3版本或更新版本,发布的时候再改回原来的SDK版本。

配置:

       在应用的Application类中配置StrictMode策略,越早越好,最早也就是OnCreate函数里了一般情况下配置detectAll()就行,省的多写代码。

public class GameCenterAppliction extends Application {
	@Override
	public void onCreate() {
		if (DXConstants.DEBUG) {
			// 调试时候,统计各个函数的调用时间,为的是优化程序,提高流畅
			StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
					.detectDiskReads()// 读磁盘
					.detectDiskWrites()// 写磁盘
					.detectNetwork()// 访问网络
					.detectCustomSlowCalls()// 自定义函数调用
					.detectAll() // 所有堵塞主线程的都会捕捉,一般配置这个就够了,上面四个就不用
					.penaltyLog()// 打印logcat
					.build());
			StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
					.detectLeakedSqlLiteObjects()
					// 探测SQLite数据库操作
					.penaltyLog()
					// 打印logcat
					.penaltyDeath().build());
		}
		super.onCreate();
	}

StrictMode使用案例



以点心定制游戏中心为例,在进入主界面时,有一段时间的卡顿(在低端机上更明显)。StrictMode捕捉到并将问题信息打印出来,在Eclipse -> LogCat 添加TAG过滤为StrictMode。(小技巧:Ctrl +C 复制Lognotepad里看,还能高亮显示,一般人我不告诉他)

原因:DService初始化时做了数据库查询的操作,耗时698毫秒,调用时间过长,被StrictMode标记为缓慢调用,就会出现如上的日志。不科学啊,通常类初始化都是在主线程中,如果查询数据库,这样不就堵塞的主线程了么?!

解决方法:可考虑改为在子线程中完成。


Android开发响应检测及内存分析 - 【Heap】

Heap监测应用进程-内存使用情况 1. 启动eclipse后,切换到DDMS透视图 2. 连接手机确认手机是处于“USB调试”模式 3. 点击选中想要监测的进程并点击选中Devices视图界面中最上...
  • lnb333666
  • lnb333666
  • 2015年07月08日 15:24
  • 1669

Android开发响应检测及内存分析 - 【TraceView】

Android SDK提供一个TraceView的工具,它可以通过分析生成的跟踪文件给出各项数值以及图形化的结果。 DDMS 中 TraceView 使用示意图如下,开发人员可以通过选择 Devic...
  • lnb333666
  • lnb333666
  • 2015年07月08日 15:13
  • 1299

StrictMode检查android开发违反策略的方法

最新的Android平台中(Android 2.3起),新增加了一个新的类,叫StrictMode(android.os.StrictMode)。这个类可以用来帮助开发者改进他们编写的应用,并且提供了...
  • TonyJiang08
  • TonyJiang08
  • 2015年03月09日 16:39
  • 537

StrictMode检查android开发违反策略的方法

最新的Android平台中(Android 2.3起),新增加了一个新的类,叫StrictMode(android.os.StrictMode)。这个类可以用来帮助开发者改进他们编写的应用,并且提供了...
  • MYBOYER
  • MYBOYER
  • 2015年03月11日 17:13
  • 375

android 内存泄露分析 Lint StrictMode LeakCanary Memory Analyzer (MAT)

在安卓开发当中经常会碰到各种异常错误,尤其是OOM最让人恼火,接下来记录一下在日常开发中用到的几种帮助工具,能让我们更好地查找内存泄露出处。1.首先我们来找到内存泄露的定位:静态定位 静态代码的查找...
  • u010023795
  • u010023795
  • 2016年12月27日 16:32
  • 444

Android内存泄露分析之StrictMode

StrictMode(严格模式)使用 StrictMode严格模式,主要用来检测程序中违例情况的开发者工具。最常用的场景就是检测主线程中本地磁盘、网络读写等耗时的操作以及Activity泄露等,但该...
  • yincheng886337
  • yincheng886337
  • 2016年01月15日 17:07
  • 1406

Android开发过程中内存泄露检测

Android开发过程中内存泄露这个问题许多开发者在开发之路上在所难免都会遇到。今天博主面试也被问到了,面试没答好,特来百度后总结一番,很适合新人看。希望对各位有用。 一、内存泄露内存泄漏会因为减少可...
  • u010123643
  • u010123643
  • 2015年11月10日 20:49
  • 470

Android开发过程中内存泄露检测

一、内存泄露内存泄漏会因为减少可用内存的数量从而降低计算机的性能。最终,在最糟糕的情况下,过多的可用内存被分配掉导致全部或部分设备停止正常工作,或者应用程序崩溃。内存泄漏可能不严重,甚至能够被常规的手...
  • shimiso
  • shimiso
  • 2015年03月27日 15:03
  • 3202

Android开发中的APP内存泄漏检测

使用android shell命令查看内存使用情况使用adb shell dumpsys meminfo pkgname或者直接使用AndroidStudio里面的memory usage功能然后就会...
  • lhd201006
  • lhd201006
  • 2016年10月19日 21:40
  • 1294

StrictMode检测内存泄漏

StrictModeAndroid 2.3(API Level 9) 提供了一个称为严苛模式(StrictMode)的调试特性,Google称该特性已经使数百个Android上的Google应用程序受...
  • Next_Second
  • Next_Second
  • 2017年01月10日 17:52
  • 691
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android开发响应检测及内存分析 - 【StrictMode】
举报原因:
原因补充:

(最多只允许输入30个字)