android strictmode有什么作用,Android 性能优化 之 StrictMode

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

StrictMode概述

StrictMode 是用来检测程序中违例情况的开发者工具。使用StrictMode,系统检测出主线程违例的情况会做出相应的反应,如日志打印,弹出对话框亦或者崩溃等。换言之,严格模式会将应用的违例细节暴露给开发者方便优化与改善。

StrictMode

严格模式主要检测两大问题,一个是线程策略,即TreadPolicy,另一个是VM策略,即VmPolicy。

ThreadPolicy

线程策略检测的内容有自定义的耗时调用使用detectCustomSlowCalls()

开启磁盘读取操作使用detectDiskReads()

开启磁盘写入操作使用detectDiskWrites()

开启网络操作使用detectNetwork()

VmPolicy

虚拟机策略检测的内容有

Activity泄露 使用detectActivityLeaks()

开启未关闭的Closable对象泄露 使用detectLeakedClosableObjects()

开启泄露的Sqlite对象 使用detectLeakedSqlLiteObjects()

开启检测实例数量 使用setClassInstanceLimit()开启

StrictMode 应用

在Application 的onCreate()方法中添加如下代码。1

2

3

4if (BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build());

}

通过过滤StrictMode,查看检测结果。1adb logcat | grep "StrictMode"

例子分析

文件没有关闭1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17E/StrictMode( 2649): A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.

E/StrictMode( 2649): java.lang.Throwable: Explicit termination method 'end' not called

E/StrictMode( 2649): at dalvik.system.CloseGuard.open(CloseGuard.java:184)

E/StrictMode( 2649): at java.util.zip.Inflater.(Inflater.java:82)

E/StrictMode( 2649): at java.util.zip.GZIPInputStream.(GZIPInputStream.java:103)

E/StrictMode( 2649): at java.util.zip.GZIPInputStream.(GZIPInputStream.java:88)

E/StrictMode( 2649): at com.baidu.simeji.util.StringGzipCompressUtil.unCompress(StringGzipCompressUtil.java:59)

E/StrictMode( 2649): at com.baidu.simeji.prediction.ServerPrediction$1.onReceive(ServerPrediction.java:136)

E/StrictMode( 2649): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:978)

E/StrictMode( 2649): at android.os.Handler.handleCallback(Handler.java:739)

E/StrictMode( 2649): at android.os.Handler.dispatchMessage(Handler.java:95)

E/StrictMode( 2649): at android.os.Looper.loop(Looper.java:145)

E/StrictMode( 2649): at android.app.ActivityThread.main(ActivityThread.java:6922)

E/StrictMode( 2649): at java.lang.reflect.Method.invoke(Native Method)

E/StrictMode( 2649): at java.lang.reflect.Method.invoke(Method.java:372)

E/StrictMode( 2649): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)

E/StrictMode( 2649): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

内存泄漏1

2

3E/StrictMode( 7796): class com.baidu.simeji.sticker.store.StickerPackCloudPreviewActivity; instances=2; limit=1

E/StrictMode( 7796): android.os.StrictMode$InstanceCountViolation: class com.baidu.simeji.sticker.store.StickerPackCloudPreviewActivity; instances=2; limit=1

E/StrictMode( 7796): at android.os.StrictMode.setClassInstanceLimit(StrictMode.java:1)

StickerPackCloudPreviewActivity本应存在一个实例,现在有两个。表明内存泄漏。

#Android 性能优化#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值