【问题标题】:StrictMode AndroidBlockGuardPolicy.onReadFromDiskStrictMode AndroidBlockGuardPolicy.onReadFromDisk
【发布时间】:2017-11-04 00:50:08
【问题描述】:

我面临下一个问题:

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,但我应该修复它吗?如果是,为什么文档不包含有关它的任何信息? 最好的问候。

【问题讨论】:

    标签: android android-strictmode


    【解决方案1】:

    我在文档中没有找到有关这些方法的任何信息

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

    我只找到了一种解决方案 - 使用 AsyncTask,但我应该修复它吗?

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

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

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

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

    如果是,为什么文档不包含任何相关信息?

    documentation on StrictMode,如果这就是你的意思。除此之外,我认为 Google 希望专业的应用程序开发人员能够阅读书籍、参加课程或找到其他方式来了解文档中直接介绍的 Android 应用程序开发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-22
      • 2011-05-25
      • 1970-01-01
      • 2014-04-19
      • 2012-06-22
      • 1970-01-01
      • 2018-09-25
      • 2019-04-10
      相关资源
      最近更新 更多