Улучшите время загрузки аватара - PullRequest
0 голосов
/ 24 апреля 2020

Я использую Smack для загрузки аватара. Это занимает много времени и большую часть этого времени истекает (иногда даже 2 мин не достаточно). Есть ли способ, которым я могу улучшить это? Есть ли другой способ быстро загрузить аватар?

Я знаю, что у меня может быть только моя собственная служба http, обслуживающая аватары, но я не хочу go по этому маршруту прямо сейчас. Получение аватара VCard происходит очень быстро.

Я использую Smack 4.3.0, и журналы Smack находятся здесь: https://pastebin.com/dQbSEpmJ

Вот код, который я использую:

fun setPhoto(path: String) = viewModelScope.launch(Dispatchers.IO) {
        try {
            val file = File(path)
            val vCardMgr = VCardManager.getInstanceFor(connection)
            val vCard = vCardMgr.loadVCard()
            vCard.setAvatar(Base64.encodeToString(file.readBytes(), Base64.DEFAULT), FileUtils.getMimeType(path))
            vCardMgr.saveVCard(vCard)
        } catch (e: Exception) {
            launch(Dispatchers.Main){
                Toast.makeText(chatApp.applicationContext, e.message, Toast.LENGTH_LONG).show()
            }
        }
    }

1 Ответ

0 голосов
/ 27 апреля 2020

Я обнаружил, что при тестировании с openfire размер файла был настолько большим, что, в свою очередь, приводил к тому, что Stanza была настолько жесткой, что приводила к краху сервера. Это было подтверждено Гусом ( Ignite Realtime guy ), и здесь я процитирую его:

Openfire имеет (настраиваемый) предел максимального размера строфы. Я думаю, что это на 2 МБ. Обратите внимание, что при кодировании двоичных данных с помощью base64 кодированный результат будет намного больше, чем не закодированный оригинал. Я предлагаю вам уменьшить размер изображения в вашей vcard или использовать другой механизм для обмена данными.

Таким образом, сжатие изображения решило проблему

...