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