在启动时加载大位图

时间:2017-02-10 16:31:17

标签: android bitmap

我有一个基于此sample的介绍屏幕,但我没有为背景设置颜色,而是为每个设置了一个图像(我有3个屏幕)。我为每个屏幕密度(hdpi等)和每张图片创建了一个可绘制的文件夹,以便我可以支持多种尺寸和分辨率。还有什么我可以做或者我应该做更多的加载时间吗? Intellij正在抛出Skipped 56 frames! The application may be doing too much work on its main thread.,但应用程序是响应式的。我正在考虑官方表现guide,但我不知道实施它是否过度,将图像资产放入各种可绘制的文件夹中足以满足这种情况?或者我应该在它上面做那些计算?这就是我现在所做的:

<ImageView
 android:id="@+id/welcome_image_view"
 android:layout_width="0dp"
 app:layout_constraintTop_toTopOf="parent"
 app:layout_constraintLeft_toLeftOf="parent"
 app:layout_constraintBottom_toBottomOf="parent"
 app:srcCompat="@drawable/love"
 android:scaleType="centerCrop"
 tools:ignore="ContentDescription"
 android:layout_height="0dp"
 app:layout_constraintRight_toRightOf="parent" />

1 个答案:

答案 0 :(得分:0)

我猜你用来加载图片的代码比导致跳帧的布局文件更多。

你真的有2个进球。 1,最小化实际装载时间。用户不希望从空屏幕或占位符开始,而不是必须。 2,将工作从UI线程移开。任何图像加载但最小的图像不应该在UI线程上完成。

对于1,请确保您的图像不大于在设备上显示的图像。

对于2,您指向的文档建议Glide。 (该文档的其余部分大部分内容可能并不适用于您的案例。大部分内容适用于您拥有完整图片但只需要显示缩略图或其他降低分辨率的图片时)。 AsyncTask是从UI线程中完成简单工作的常用方法。 (Thread和Runnable是其他方式,但我不会在这里进入)。