Как обойти чтение диска slf4j в основном потоке в Android?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как обойти чтение диска slf4j в основном потоке в Android?

Сообщение Anonymous »

В моем приложении для Android есть следующая строка:
private Logger logger = LoggerFactory.getLogger(getClass().getSimpleName());

При проверке доступа к потокам в строгом режиме я обнаружил следующую проблему (чтение диска в основном потоке):
java.lang.RuntimeException: StrictMode ThreadPolicy violation
at android.os.StrictMode$AndroidBlockGuardPolicy.onThreadPolicyViolation(StrictMode.java:1876)
at android.os.StrictMode$AndroidBlockGuardPolicy.lambda$handleViolationWithTimingAttempt$0$StrictMode$AndroidBlockGuardPolicy(StrictMode.java:1790)
at android.os.StrictMode$AndroidBlockGuardPolicy$$ExternalSyntheticLambda0.run(Unknown Source:6)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Caused by: android.os.strictmode.DiskReadViolation
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1659)
at java.io.UnixFileSystem.getLastModifiedTime(UnixFileSystem.java:289)
at java.io.File.lastModified(File.java:937)
at java.util.zip.ZipFile.(ZipFile.java:265)
at java.util.zip.ZipFile.(ZipFile.java:187)
at java.util.jar.JarFile.(JarFile.java:169)
at java.util.jar.JarFile.(JarFile.java:106)
at libcore.io.ClassPathURLStreamHandler.(ClassPathURLStreamHandler.java:46)
at dalvik.system.DexPathList$Element.maybeInit(DexPathList.java:750)
at dalvik.system.DexPathList$Element.findResource(DexPathList.java:777)
at dalvik.system.DexPathList.findResources(DexPathList.java:572)
at dalvik.system.BaseDexClassLoader.findResources(BaseDexClassLoader.java:279)
at java.lang.ClassLoader.getResources(ClassLoader.java:839)
at java.util.ServiceLoader$LazyIterator.hasNextService(ServiceLoader.java:349)
at java.util.ServiceLoader$LazyIterator.hasNext(ServiceLoader.java:402)
at java.util.ServiceLoader$1.hasNext(ServiceLoader.java:488)
at org.slf4j.LoggerFactory.findServiceProviders(LoggerFactory.java:114)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:178)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:170)
at org.slf4j.LoggerFactory.getProvider(LoggerFactory.java:455)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:441)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:390)
at mypackage.BillingClient.(BillingClient.java:46)

Похоже, это механизм загрузки slf4j по умолчанию, который пытается читать с диска.
Каким может быть обходной путь? Крайне нежелательно перемещать создание экземпляра в фоновый поток/сопрограмму.
У меня есть следующие зависимости в "build.gradle":
implementation 'org.slf4j:slf4j-api:2.0.7'
implementation 'com.github.tony19:logback-android:3.0.0'


Подробнее здесь: https://stackoverflow.com/questions/798 ... in-android
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»