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 性能优化#