严格模式 AndroidBlockGuardPolicy.onReadFromDisk

StrictMode AndroidBlockGuardPolicy.onReadFromDisk

我遇到了下一个问题:

StrictMode policy violation; ~duration=2235 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=65567 violation=2
                                                                   at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1278)
                                                                   at libcore.io.BlockGuardOs.lseek(BlockGuardOs.java:162)
                                                                   at java.io.RandomAccessFile.seek(RandomAccessFile.java:603)
                                                                   at java.util.zip.Zip64.parseZip64EocdRecordLocator(Zip64.java:98)
                                                                   at java.util.zip.ZipFile.readCentralDir(ZipFile.java:419)
                                                                   at java.util.zip.ZipFile.<init>(ZipFile.java:175)
                                                                   at java.util.zip.ZipFile.<init>(ZipFile.java:131)
                                                                   at dalvik.system.DexPathList$Element.maybeInit(DexPathList.java:452)
                                                                   at dalvik.system.DexPathList$Element.findResource(DexPathList.java:499)
                                                                   at dalvik.system.DexPathList.findResource(DexPathList.java:360)
                                                                   at dalvik.system.BaseDexClassLoader.findResource(BaseDexClassLoader.java:67)
                                                                   at java.lang.ClassLoader.getResource(ClassLoader.java:403)
                                                                   at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:442)
                                                                   at ch.qos.logback.classic.util.ContextInitializer.getResource(Unknown Source)
                                                                   at ch.qos.logback.classic.util.ContextInitializer.findConfigFileURLFromAssets(Unknown Source)
                                                                   at ch.qos.logback.classic.util.ContextInitializer.autoConfig(Unknown Source)
                                                                   at org.slf4j.impl.StaticLoggerBinder.init(Unknown Source)
                                                                   at org.slf4j.impl.StaticLoggerBinder.<clinit>(Unknown Source)
                                                                   at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
                                                                   at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
                                                                   at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
                                                                   at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
                                                                   at com.my.utils.x.c(LogUtils.java:164)
                                                                   at com.my.utils.x.b(LogUtils.java:65)
                                                                   at com.my.Application.onCreate(Application.java:148)
                                                                   at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1018)
                                                                   at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4970)
                                                                   at android.app.ActivityThread.-wrap1(ActivityThread.java)
                                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1560)
                                                                   at android.os.Handler.dispatchMessage(Handler.java:111)
                                                                   at android.os.Looper.loop(Looper.java:207)
                                                                   at android.app.ActivityThread.main(ActivityThread.java:5765)
                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

我在 3 个地方遇到了这个错误:

1) logger = LoggerFactory.getLogger(name);
2) mMessagesJobManager = new JobManager(this, configuration);
3) Fabric.with(this, new Crashlytics());

我没有在文档中找到有关这些方法的任何信息。我只找到一种解决方案 - 使用 AsyncTask,但我应该修复它吗?如果是,为什么文档不包含有关它的任何信息? 最好的问候。

I didn't find any info about these methods in documentation

那是因为 none 是 Android 的一部分。据推测,它们来自您添加到应用程序的库(slf4j、Fabric,我猜可能是 Firebase)。

I found only one solution - use AsyncTask, but should I fix it?

嗯,您的应用程序崩溃了。如果你想发布这个应用程序,你需要做一些事情来阻止崩溃。

在您的代码中,您配置 StrictMode 以应用 penaltyDeath() 进行磁盘读取。因此,您的选择是:

  • 将此磁盘 I/O 移出主应用程序线程,这是通常的最佳解决方案,尽管它可能不切实际(假设您不控制库的实现)

  • 停止配置 StrictMode 以应用 penaltyDeath() 进行磁盘读取。

If yes, why documentation doesn't contain any info about it?

documentation on StrictMode,如果你是这个意思的话。除此之外,我想 Google 期望专业的应用程序开发人员阅读书籍、参加课程或找到其他方式来了解 Android 应用程序开发,而不是文档中直接涵盖的内容。