Как скопировать OutOfMemory в Android Emulator? - PullRequest
1 голос
/ 17 марта 2020

Приложение, над которым я работаю, прошло тестирование на физических устройствах. Команда тестирования сообщила, что

Huawei P8 Lite Android 5.1: если загружено изображение размером более 4 МБ, приложение неожиданно закрывается

Я попытался повторить проблема с эмулятором "Google Pixel 3a с Android 5.1", но процесс прошел нормально. Код для этого процесса загрузки включает метод изменения размера, так что независимо от того, какое изображение вы выберете, оно не будет> 4 МБ, когда оно достигнет сервера. Мне нужно либо воспроизвести ошибку и найти способ исправить проблему, либо сделать что-то с кодом, который предотвращает такой взлом sh (мы считаем, что это из-за нехватки памяти sh) независимо от того, сколько лет устройству. Мы поддерживаем Android 21 +

private fun resize(image: Bitmap, maxWidth: Int, maxHeight: Int): Bitmap {
        var imageResized = image
        if (maxHeight > 0 && maxWidth > 0) {
            val width = imageResized.width
            val height = imageResized.height
            val ratioBitmap = width.toFloat() / height.toFloat()
            val ratioMax = maxWidth.toFloat() / maxHeight.toFloat()

            var finalWidth = maxWidth
            var finalHeight = maxHeight
            if (ratioMax > ratioBitmap) {
                finalWidth = (maxHeight.toFloat() * ratioBitmap).toInt()
            } else {
                finalHeight = (maxWidth.toFloat() / ratioBitmap).toInt()
            }
            imageResized = Bitmap.createScaledBitmap(imageResized, finalWidth, finalHeight, true)
            return imageResized
        } else {
            return imageResized
        }
    }

    fun captureImageResult(requestCode: Int, data: Intent?) {
    if (requestCode == SELECT_PICTURE) {
        data?.data?.let {
            mCapturedImageURI = data.data
        }
    }


    mCapturedImageURI.let {
        val msm = MediaStorageManager((view as NewBaseFragment).activity!!)
        val bmp = msm.getBitmapFromUri(mCapturedImageURI!!)

        //save image bytes
        imageBytes = msm.getBytesFromBitmap(bmp!!)

        val bitmapScaled = resize(bmp, 1024, 1024)
        imageBytes = msm.getBytesFromBitmap(bitmapScaled)

        //image too big
        if (imageBytes?.size ?: IMAGE_MAX_SIZE < IMAGE_MAX_SIZE) {
            //show image selected
            view.renderImage(bitmapScaled)
        } else {
            view.showErrorDialog()
            imageBytes = null
        }
    }
}
...