android strictmode有什么作用,Android 性能优化 之 StrictMode
8種機(jī)械鍵盤軸體對(duì)比
本人程序員,要買一個(gè)寫代碼的鍵盤,請(qǐng)問紅軸和茶軸怎么選?
StrictMode概述
StrictMode 是用來檢測(cè)程序中違例情況的開發(fā)者工具。使用StrictMode,系統(tǒng)檢測(cè)出主線程違例的情況會(huì)做出相應(yīng)的反應(yīng),如日志打印,彈出對(duì)話框亦或者崩潰等。換言之,嚴(yán)格模式會(huì)將應(yīng)用的違例細(xì)節(jié)暴露給開發(fā)者方便優(yōu)化與改善。
StrictMode
嚴(yán)格模式主要檢測(cè)兩大問題,一個(gè)是線程策略,即TreadPolicy,另一個(gè)是VM策略,即VmPolicy。
ThreadPolicy
線程策略檢測(cè)的內(nèi)容有自定義的耗時(shí)調(diào)用使用detectCustomSlowCalls()
開啟磁盤讀取操作使用detectDiskReads()
開啟磁盤寫入操作使用detectDiskWrites()
開啟網(wǎng)絡(luò)操作使用detectNetwork()
VmPolicy
虛擬機(jī)策略檢測(cè)的內(nèi)容有
Activity泄露 使用detectActivityLeaks()
開啟未關(guān)閉的Closable對(duì)象泄露 使用detectLeakedClosableObjects()
開啟泄露的Sqlite對(duì)象 使用detectLeakedSqlLiteObjects()
開啟檢測(cè)實(shí)例數(shù)量 使用setClassInstanceLimit()開啟
StrictMode 應(yīng)用
在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,查看檢測(cè)結(jié)果。1adb logcat | grep "StrictMode"
例子分析
文件沒有關(guān)閉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)
內(nèi)存泄漏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本應(yīng)存在一個(gè)實(shí)例,現(xiàn)在有兩個(gè)。表明內(nèi)存泄漏。
#Android 性能優(yōu)化#
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的android strictmode有什么作用,Android 性能优化 之 StrictMode的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。