严格模式 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 应用程序开发,而不是文档中直接涵盖的内容。
我遇到了下一个问题:
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 应用程序开发,而不是文档中直接涵盖的内容。