1. 程式人生 > >Android StrictMode嚴格模式的使用方法

Android StrictMode嚴格模式的使用方法

      Android 2.3提供一個稱為嚴苛模式StrictMode的除錯特性,Google稱該特性已經使數百個Android上的Google應用程式受益。那它都做什麼呢?它將報告與執行緒及虛擬機器相關的策略違例。一旦檢測到策略違例policy violation,你將獲得警告,其包含了一個棧trace顯示你的應用在何處發生違例。你可以強制用警告代替崩潰crash,也可以僅將警告計入日誌讓你的應用繼續執行。StrictMode是一個十分有用的類,它可以很方便地應用於檢查Android應用程式的效能和存在的問題。當開啟這個模式後,開發者能很好地檢查應用中存在的潛在問題。

StrictMode分為以下兩種策略:
1. 執行緒監控策略

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
					.detectDiskReads()
					.detectDiskWrites()
					.detectNetwork()
					.detectAll()
					.penaltyLog()
                                        //penaltyDeath()
					.build());

(1)setThreadPolicy():將對當前執行緒應用該策略
(2)detectDiskReads():監控磁碟讀
(3)detectDiskWrites():監控磁碟寫
(4)detectNetwork():監控網路訪問
(5)detectAll():檢測當前執行緒所有函式
(6)penaltyLog():表示將警告輸出到LogCat,你也可以使用其他或增加新的懲罰(penalty)函式,例如使用penaltyDeath()的話,一旦StrictMode訊息被寫到LogCat後應用就會崩潰。
你不需要頻繁開啟嚴苛模式,你可以在Activity的onCreate()函式中開啟它,你也可以在Application派生類的OnCreate()函式中設定嚴苛模式。執行緒中執行的任何程式碼都可以設定嚴苛模式(StrictMode),但你的確只需要設定一次,一次就夠了。

2.VM虛擬機器監控策略

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
    .detectLeakedSqlLiteObjects()
    .detectAll()
    .penaltyLog()
    //.penaltyDeath()
    .build());
VM略重點關注如下幾類:

(1)記憶體洩露的Activity物件

(2)記憶體洩露的SQLite物件

(3)記憶體洩露的其他任何類似可關閉物件

記憶體洩露的Activity物件和記憶體洩露的SQLite物件都比較好理解,而所謂“其他任何類似可關閉物件”的檢查,主要是去監那些本該釋放的物件,比如應該呼叫close()方法的物件。

3. 應該說大部分由StrictMode產生的規則警示都應去遵守,但有時也不是所有產生的資訊都表明你的程式有錯誤。比如,在應用程式的主執行緒中去快速讀寫磁碟其實不會對應用的效能產生太大的影響,又或者你在除錯程式階段有一些除錯的程式碼違反了設定的規則,這些都可以忽略掉這些規則。
忽略規則有兩種方法,一種是單純在程式碼中把Strictmode的程式碼註釋掉,另外一種比較好的方法是,在需要忽略的時候和地方,增加相應的程式碼去讓系統停止使用這些規則去檢查,等開發者認為有必要檢查時,再重新應用這些規則,比如:

StrictMode.ThreadPolicy old = StrictMode.getThreadPolicy();
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder(old)
  .permitDiskWrites()
  .build());

//TODO: do write something to disk
StrictMode.setThreadPolicy(old);

這裡首先用old來儲存了當前的策略規則,然後do write something to disk;這裡執行了一些向磁碟快速讀寫的操作,最後又重新啟用了這些規則。

相關推薦

Android StrictMode嚴格模式的使用方法

      Android 2.3提供一個稱為嚴苛模式StrictMode的除錯特性,Google稱該特性已經使數百個Android上的Google應用程式受益。那它都做什麼呢?它將報告與執行緒及虛擬機器相關的策略違例。一旦檢測到策略違例policy violation,你

Android原始碼設計模式之模板方法模式

在面向物件開發中,通常會遇到這樣一個問題,我們知道一個演算法所需的關鍵步驟,並確定了這些步驟的執行順序,但是某些步驟的具體實現是未知的,或者說某些步驟的實現是會隨著環境的變化而改變的,例如,執行程式的流程大致如下: 1.檢查程式碼的正確性; 2.連結相關的類庫; 3.編譯相關的程式碼;

webpack引入第三方js去除嚴格模式的幾種方法

1. babel5 babel: { options: { blacklist: ["useStrict"], // ... }, // ... } 2. babel6 略過模組: { pres

(三)android升級--系統升級方法和啟動模式

1、系統更新的兩種方法 (1)從文件一我們知道了怎麼去製作android升級所需要的升級包,當然升級包做好後,我們怎麼去拿到這個升級包,這裡有兩種方法能拿到。第一,就是通過離線升級,也就是把製作好的升級包放到TF卡或SD卡中,然後選擇它即可;第二,就是通過線上升級,也就是我

Android 高版本API方法在低版本系統上的兼容性處理

file mea param data- count clas eve lint -i Android 版本更替,新的版本帶來新的特性,新的方法。 新的方法帶來許多便利,但無法在低版本系統上運行,如果兼容性處理不恰當,APP在低版本系統上,運行時將會crash。 本文以一個

關於Android手機MTP模式連接的一些設置(win7和ubuntu下,以紅米1s為例)

sta start .net eno bcm htm web date ati 有些手機的MTP模式在電腦上識別不了,須要一些設置才幹夠,以下就網上收集來的一些設置方法集中貼過來: 一、 win7下 參考:http://blog.ammrli.com/?p=11

Android ListView動畫實現方法

rri pan 自己 data- src def popu 動畫 onclick 在Android中listview是最經常使用的控件之中的一個,可是有時候我們會認為千篇一律的listview看起來過於單調,於是就產生了listView動畫,listview載入了動畫會

設計模式模式方法模式

ram crypt 模板方法 blog log quest void 客戶端使用 分享 模式方法模式類圖: 定義:定義一個算法中的操作框架,而將一些步驟延遲到子類中。使得子類可以不改變算法的結構即可重定義該算法的某些特定步驟 模板方法模式要註意: 1. 為了可以讓模板方法

Javascript 嚴格模式(strict mode)詳解

eval ref 條件 ssa for this關鍵字 表示法 ocs 行為 Javascript 嚴格模式詳解 一、概述 除了正常運行模式,ECMAscript 5添加了第二種運行模式:"嚴格模式"(strict mode)。顧名思義,這種模式使得Jav

我的Android進階之旅------>Androidandroid:windowSoftInputMode的使用方法

onf ecif 標簽 ear evel per another not 行為 面試題:怎樣在顯示某個Activity時馬上彈出軟鍵盤? 答案:在AndroidManifest.xml文件裏設置<activity>標簽的android:win

Android 圖片壓縮的方法大全

方法 nal ons arr reset 註意 you 固定 .com public static Bitmap revitionImageSize(String path) throws IOException { BufferedInputStream in

aNDROID開發盈利模式分析

aid 盈利 ive andro .com and roi android開發 music RELaTIVELaYOUT%E5%B1%9E%E6%80%A7%E5%A4%A7%E5%85%A8 http://music.baidu.com/songlist/4956847

【轉】【Java/Android】Toast使用方法大全

runnable public 顯示 ssa setview nbsp efault 使用方法 let Toast 是一個 View 視圖,快速的為用戶顯示少量的信息。 Toast 在應用程序上浮動顯示信息給用戶,它永遠不會獲得焦點,不影響用戶的輸入等操作,主要用於 一些幫

js 要寫嚴格模式

ges .cn png 但是 模式 images http 技術 手機端 js 為了能在移動端通用,要寫嚴格模式: 這裏多了個逗號,在pc上瀏覽器可以通過,但是在手機端就不能。js 要寫嚴格模式

嚴格模式-基礎知識總結------彭記(015)

sign htm property mode font uncaught ron type 無效 嚴格模式 <script> /*嚴格模式*/ "use strict"; /*如果同時定義多個同名的變量,後面的將前面的覆蓋*/

JS嚴格模式

span 編輯 -a -s tex center style nbsp pan 如何開啟嚴格模式? 在js中,只需要在頂部添加“use strict”,即可進入嚴格模式 在函數中加上“use strict”編輯指示,也可以指定函數在嚴格模式下執行, 如 function d

Android Activity 啟動模式

.aspx art www 設置 instance ini cnblogs 順序 http Android啟動模式也就是Activity任務棧的運行模式:任務棧是用來存儲Activity的 在AndroidManifest.xml中的標簽

【設計模式Android】原型模式——復制中心走出來的克隆人

設計模式 android 什麽是原型模式 所謂原型模式,就是用原型實例來指定創建對象的種類,並通過復制這些原型創建新的對象的設計模式。原型模式一般用於創建復雜的或者構建耗時的實例,或者用於只讀對象的修改。 原型模式的實現方式 (1)淺拷貝當代的每個程序員小時候都玩過《尤裏的復仇》這款遊戲,遊戲中的“尤

【設計模式Android】狀態模式——一個人的兩幅面孔

android 設計模式什麽是狀態模式 所謂狀態模式,就是當一個對象的內在轉臺改變時允許改變其行為,這個對象看起來就像是改變了其類的設計模式。狀態模式和策略模式都是為具有多種可能情形設計的模式,兩者的結構幾乎完全一樣,但狀態模式的行為是平行且不可替換的,而策略模式的行為則是彼此獨立的。換句話說就是:狀態模式將