2016-03-16 103 views
1

我已經通過代碼啓用StrictMode我的應用程序的Android StrictModeDiskReadViolation:當應用程序啓動時

public void onCreate() { 
    setStrictMode(); 
    super.onCreate(); 
} 

private void setStrictMode() { 
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() 
      .detectAll() 
      .penaltyLog() 
      .penaltyDeath() 
      .build()); 
    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() 
      .detectAll() 
      .penaltyLog() 
      .build()); 
} 

我發現了一個崩潰時啓動下面的日誌:

StrictMode違反政策; 〜duration:0 ms:android.os.StrictMode $ StrictModeDiskReadViolation:policy = 95 violation = 2 at android.os.StrictMode $ AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1137) at libcore.io.BlockGuardOs.open(BlockGuardOs。 java:182) at libcore.io.IoBridge.open(IoBridge.java:442) at java.io.FileInputStream。(FileInputStream.java:76) at android.graphics.Typeface.getFullFlipFont(Typeface.java:582 ) at android.graphics.Typeface.getFontPathFlipFont(Typeface.java:530) at android.graphics.Typeface.SetFlipFonts(Typeface.java:717) at android.graphics.Typeface.SetAppTypeFace(Typeface.java:844) at android.app.Application.onCreate(Application.java:108)

我覺得是一個io操作主線程違規,我的設備是samsung s6,android版本5.1.1,但是我找不到方法getFullFlipFont任何地方,如果我禁用strictmode它會沒事的,io違規發生在哪裏?

回答

1

這似乎發生在三星的手機上。在三星S7上運行StrictMode時遇到同樣的問題。但在Nexus 6P上運行時不存在這個問題。

解決此問題的兩種方法。一種是在應用程序super.onCreate()後打開嚴格模式。這並不理想,因爲我相信你會遇到不屬於你的代碼的其他問題。

另一個是壓制它。你可以檢查出https://medium.com/@elye.project/android-strict-mode-selective-code-suppression-37ee0d999f6b#.wismc9ryh。這是使用Kotlin,但你可以想出一種爲Java工作的方式,但更麻煩一點。

或者,您可以考慮嘗試使用此方法來抑制Filter Android StrictMode violations by duration

相關問題