如何找出针对 Strictmode 策略违规所采取的措施

Posted

技术标签:

【中文标题】如何找出针对 Strictmode 策略违规所采取的措施【英文标题】:how to findout action taken against Strictmode policy violation 【发布时间】:2014-08-19 00:46:38 【问题描述】:

我是 android 新手,正在调试现有应用程序。在应用程序运行时,我遇到了 StrictMode 策略违规。我想知道违规发生后采取了哪些措施?我正在粘贴日志。

D/StrictMode( 4548): StrictMode policy violation; ~duration=68 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=31 violation=2
D/StrictMode( 4548):    at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1135)
D/StrictMode( 4548):    at libcore.io.BlockGuardOs.read(BlockGuardOs.java:148)
D/StrictMode( 4548):    at libcore.io.IoBridge.read(IoBridge.java:425)
D/StrictMode( 4548):    at java.io.RandomAccessFile.read(RandomAccessFile.java:287)
D/StrictMode( 4548):    at java.io.RandomAccessFile.read(RandomAccessFile.java:270)
D/StrictMode( 4548):    at com.intel.android.gallery3d.common.BlobCache.loadIndex(BlobCache.java:260)
D/StrictMode( 4548):    at com.intel.android.gallery3d.common.BlobCache.<init>(BlobCache.java:144)
D/StrictMode( 4548):    at com.intel.android.gallery3d.util.CacheManager.getCache(CacheManager.java:56)
D/StrictMode( 4548):    at com.intel.android.gallery3d.app.Bookmarker.getBookmark(Bookmarker.java:64)
D/StrictMode( 4548):    at com.intel.android.gallery3d.app.MoviePlayer.initPlayer(MoviePlayer.java:281)
D/StrictMode( 4548):    at com.intel.android.gallery3d.app.MoviePlayer.<init>(MoviePlayer.java:142)
D/StrictMode( 4548):    at com.intel.android.gallery3d.app.MovieActivity$1.<init>(MovieActivity.java:91)
D/StrictMode( 4548):    at com.intel.android.gallery3d.app.MovieActivity.onCreate(MovieActivity.java:90)
D/StrictMode( 4548):    at android.app.Activity.performCreate(Activity.java:5231)
D/StrictMode( 4548):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
D/StrictMode( 4548):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2188)
D/StrictMode( 4548):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2273)
D/StrictMode( 4548):    at android.app.ActivityThread.access$800(ActivityThread.java:138)
D/StrictMode( 4548):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1236)
D/StrictMode( 4548):    at android.os.Handler.dispatchMessage(Handler.java:102)
D/StrictMode( 4548):    at android.os.Looper.loop(Looper.java:149)
D/StrictMode( 4548):    at android.app.ActivityThread.main(ActivityThread.java:5045)
D/StrictMode( 4548):    at java.lang.reflect.Method.invokeNative(Native Method)
D/StrictMode( 4548):    at java.lang.reflect.Method.invoke(Method.java:515)
D/StrictMode( 4548):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
D/StrictMode( 4548):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)
D/StrictMode( 4548):    at dalvik.system.NativeStart.main(Native Method)
D/StrictMode( 4548): StrictMode policy violation; ~duration=67 ms: android.os.StrictMode$StrictModeDiskWriteViolation: policy=31 violation=1
D/StrictMode( 4548):    at android.os.StrictMode$AndroidBlockGuardPolicy.onWriteToDisk(StrictMode.java:1109)
D/StrictMode( 4548):    at libcore.io.BlockGuardOs.ftruncate(BlockGuardOs.java:101)
D/StrictMode( 4548):    at java.io.RandomAccessFile.setLength(RandomAccessFile.java:626)
D/StrictMode( 4548):    at com.intel.android.gallery3d.common.BlobCache.setActiveVariables(BlobCache.java:286)
D/StrictMode( 4548):    at com.intel.android.gallery3d.common.BlobCache.loadIndex(BlobCache.java:275)
D/StrictMode( 4548):    at com.intel.android.gallery3d.common.BlobCache.<init>(BlobCache.java:144)
D/StrictMode( 4548):    at com.intel.android.gallery3d.util.CacheManager.getCache(CacheManager.java:56)
D/StrictMode( 4548):    at com.intel.android.gallery3d.app.Bookmarker.getBookmark(Bookmarker.java:64)
D/StrictMode( 4548):    at com.intel.android.gallery3d.app.MoviePlayer.initPlayer(MoviePlayer.java:281)
D/StrictMode( 4548):    at com.intel.android.gallery3d.app.MoviePlayer.<init>(MoviePlayer.java:142)
D/StrictMode( 4548):    at com.intel.android.gallery3d.app.MovieActivity$1.<init>(MovieActivity.java:91)
D/StrictMode( 4548):    at com.intel.android.gallery3d.app.MovieActivity.onCreate(MovieActivity.java:90)
D/StrictMode( 4548):    at android.app.Activity.performCreate(Activity.java:5231)
D/StrictMode( 4548):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
D/StrictMode( 4548):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2188)
D/StrictMode( 4548):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2273)
D/StrictMode( 4548):    at android.app.ActivityThread.access$800(ActivityThread.java:138)
D/StrictMode( 4548):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1236)
D/StrictMode( 4548):    at android.os.Handler.dispatchMessage(Handler.java:102)
D/StrictMode( 4548):    at android.os.Looper.loop(Looper.java:149)
D/StrictMode( 4548):    at android.app.ActivityThread.main(ActivityThread.java:5045)
D/StrictMode( 4548):    at java.lang.reflect.Method.invokeNative(Native Method)
D/StrictMode( 4548):    at java.lang.reflect.Method.invoke(Method.java:515)
D/StrictMode( 4548):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
D/StrictMode( 4548):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)
D/StrictMode( 4548):    at dalvik.system.NativeStart.main(Native Method)

任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

转到设备设置 -> 开发人员选项并启用严格模式。每当您的应用违反任何一项严格模式策略时,启用此选项都会以红色闪烁屏幕。这样你就可以弄清楚了。

【讨论】:

我需要知道在违反 StrictMode 政策后采取了哪些措施。我已经知道我的应用违反了 StrictMode 政策。 您正在 UI 线程中执行一些耗时且可能引发 ANR 的操作。所以尝试使用 AsyncTasks 或 Service 或单独的线程。【参考方案2】:

看看线:

at com.intel.android.gallery3d.common.BlobCache.loadIndex(BlobCache.java:260)

转到 BlobCache 类和第 260 行,这是发生 StrictMode 违规的时间。

在大多数情况下,问题的原因是由于主线程上的 I/O 和网络操作延迟的操作的执行。要解决此问题,请考虑使用异步机制来避免阻塞主线程。

【讨论】:

以上是关于如何找出针对 Strictmode 策略违规所采取的措施的主要内容,如果未能解决你的问题,请参考以下文章

转:StrictMode使用

Android性能优化—StrictMode的使用

如何将一个本地文件的同源策略违规绕过到另一个本地文件?

App优化 StrictMode 严格模式

BUAAOO Unit3博客作业

Android 分支 IO SDK 策略违规