Страницы

Поиск по вопросам

среда, 26 февраля 2020 г.

Как исправить утечку памяти Android Studio Kotlin

#android #kotlin


Я обращаюсь к базе данных получаю ответ в json и процессе того как обрабатывается
возникает ошибка. Я новичок в Android и прошу вашей помощи, с такой ошибкой сталкиваюсь
впервые и честно говоря так и не понял как её исправить.

Код обработки:

   // получаем ответ от php запроса в формате json
        try {
            val reader = BufferedReader(InputStreamReader(`is`, "UTF-8"), 8)
            val sb = StringBuilder()
            line = reader.readLine()
            while (line != null) {
                sb.append(line + "\n")
            }
            `is`?.close()
            result = sb.toString()
            Log.e("pass 2", "connection success$result")
        } catch (e: Exception) {
            Log.e("Fail 2", e.toString())
        }


Ошибка:

 E/AndroidRuntime: FATAL EXCEPTION: Thread-42
        Process: ru.ifr0z.fabuserlocation.example, PID: 20957
        java.lang.OutOfMemoryError: Failed to allocate a 486539272 byte allocation
with 25165824 free bytes and 149MB until OOM, max allowed footprint 271163448, growth
limit 402653184
            at java.util.Arrays.copyOf(Arrays.java:3260)
            at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:125)
            at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:451)
            at java.lang.StringBuilder.append(StringBuilder.java:137)
            at ru.ifr0z.fabuserlocation.example.TestZaps.run(TestZaps.kt:59)
    I/Process: Sending signal. PID: 20957 SIG: 9
    Application terminated.


Ещё я был бы очень признателен если бы мне кто подсказал что это значит пытался загуглить
это, но информации никакой толком не нашёл, данные логи идут аккурат перед ошибкой
о утечки памяти:

E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]
E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]
E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]
E/LocationManager: thread is not runable, msg ignore, state:WAITING, pkg:ru.ifr0z.fabuserlocation.example
E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]
E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]
E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]
E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]
E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]
E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]
E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]
E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]
E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]
E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]
E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]
E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]

    


Ответы

Ответ 1



Вы прочитали из потока одну строку и в цикле пихаете её (одну и ту же) в билдер до потери памяти:). Я Котлин знаю очень из далека, но на en-SO советуют читать поток таким кодом: val allText = inputStream.bufferedReader().use(BufferedReader::readText) Источник

Комментариев нет:

Отправить комментарий