Нарушение политики StrictMode: android.os.StrictMode $ StrictModeDiskReadViolation: нарушение политики = 327711 = 2 в приложении super.onCreate

android

14713 просмотра

2 ответа

12215 Репутация автора

Когда я включаю строгий режим обнаружения всех, мое приложение аварийно завершает работу super.onCreate () приложения (т. Е. Даже до того, как какой-либо код выполняет какие-либо действия).

Мое приложение на создание включения строгого режима, как показано ниже

override fun onCreate() {
    if (BuildConfig.DEBUG) {
        StrictMode.setThreadPolicy(
                StrictMode.ThreadPolicy.Builder()
                        .detectAll()
                        .penaltyLog()
                        .penaltyDeath().build())
        StrictMode.setVmPolicy(
                StrictMode.VmPolicy.Builder()
                        .detectAll()
                        .penaltyLog()
                        .penaltyDeath().build())
    }
    super.onCreate()

    // Some other code
}

Ошибка, которую я получил (которая находится на линии super.onCreate())

D/StrictMode: StrictMode policy violation; ~duration=98 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=327711 violation=2
                                                             at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1263)
                                                             at libcore.io.BlockGuardOs.open(BlockGuardOs.java:182)
                                                             at libcore.io.IoBridge.open(IoBridge.java:438)
                                                             at java.io.FileInputStream.<init>(FileInputStream.java:76)
                                                             at android.graphics.Typeface.getFullFlipFont(Typeface.java:584)
                                                             at android.graphics.Typeface.getFontPathFlipFont(Typeface.java:532)
                                                             at android.graphics.Typeface.SetFlipFonts(Typeface.java:719)
                                                             at android.graphics.Typeface.SetAppTypeFace(Typeface.java:846)
                                                             at android.app.Application.onCreate(Application.java:110)
                                                             at com.mypackage.MyApplication.onCreate(MyApplication.kt:40)

Это ожидаемая ошибка, которую мы должны игнорировать, или это то, что мы должны исправить?

Автор: Elye Источник Размещён: 18.07.2016 01:30

Ответы (2)


2 плюса

12215 Репутация автора

Решение

Видимо, ошибка зависит от устройства. Это происходит на Samsung S7, но не на Nexus 6P. Следовательно, это не то, что я бы исправил. Следовательно лучший способ подавить это.

Ниже приведен пример того, как я подавил это. Вы можете обернуть эти функции в класс Util.

override fun onCreate() {
    turnOnStrictMode()
    permitDiskReads{
        super.onCreate()
    }

    // Some other code
}


fun turnOnStrictMode() {
    if (BuildConfig.DEBUG) {
        StrictMode.setThreadPolicy(
                StrictMode.ThreadPolicy.Builder()
                        .detectAll()
                        .penaltyLog()
                        .penaltyDeath().build())
        StrictMode.setVmPolicy(
                StrictMode.VmPolicy.Builder()
                        .detectAll()
                        .penaltyLog()
                        .penaltyDeath().build())
    }
}

fun permitDiskReads(func: () -> Any) : Any {
    if (BuildConfig.DEBUG) {
        val oldThreadPolicy = StrictMode.getThreadPolicy()
        StrictMode.setThreadPolicy(
                StrictMode.ThreadPolicy.Builder(oldThreadPolicy)
                .permitDiskReads().build())
        val anyValue = func()
        StrictMode.setThreadPolicy(oldThreadPolicy)

        return anyValue
    } else {
        return func()
    }
}

Относится к этому для более подробной информации.

Автор: Elye Размещён: 20.07.2016 04:11

2 плюса

379 Репутация автора

Поместите оператор super.onCreate () перед методами StrictMode в fun onCreate (). Проверьте эту статью для деталей. Пройдите через ад с помощью Android StrictMode

Автор: Sanju Varghese Размещён: 13.08.2018 07:33
Вопросы из категории :
32x32