Android 在布局中加载图像花费的时间太长?

Android 在布局中加载图像花费的时间太长?,android,xml,imageview,android-imageview,Android,Xml,Imageview,Android Imageview,我正在使用ImageView制作1.3 MB的图像作为活动的背景。该活动有另一个较小的图像(徽标)和3个按钮。在那项活动中没有其他东西。现在,显示此活动最多需要9秒。在此之前,该应用程序将显示一个黑屏。当我删除带有1.3MB映像的ImageView时,活动会立即加载。那么,ImageView加载图像需要这么长时间,这正常吗?我怎样才能减少这段时间?是的,这很正常。必须对图像进行解码和缩放。它需要处理时间和内存。内存处理偶尔会触发垃圾收集,这会进一步降低处理速度。使用探查器查明时间的确切位置 缩小

我正在使用
ImageView
制作1.3 MB的图像作为活动的背景。该活动有另一个较小的图像(徽标)和3个按钮。在那项活动中没有其他东西。现在,显示此活动最多需要9秒。在此之前,该应用程序将显示一个黑屏。当我删除带有1.3MB映像的ImageView时,活动会立即加载。那么,ImageView加载图像需要这么长时间,这正常吗?我怎样才能减少这段时间?

是的,这很正常。必须对图像进行解码和缩放。它需要处理时间和内存。内存处理偶尔会触发垃圾收集,这会进一步降低处理速度。使用探查器查明时间的确切位置


缩小图像尺寸以加快解码速度并减少内存消耗。

是的,这是正常的。必须对图像进行解码和缩放。它需要处理时间和内存。内存处理偶尔会触发垃圾收集,这会进一步降低处理速度。使用探查器查明时间的确切位置


缩小图像尺寸以加快解码速度并减少内存消耗。

您有一些选择,但首先您必须问我为什么要加载这么大的位图

使文件变小

正如@laalto所说,调整图像的尺寸,使其更小。可能是最快最简单的选择。由于我看不到图像,我不能说如果分辨率更小,这是否会让用户觉得它有什么不同

对图像进行下采样

有很多关于对大图像进行下采样以避免
outofmemory
错误的帖子。这是AndroidQuery团队的一个很好的例子,他们自己已经构建了一个包含这种功能的有用工具。这也包括在帖子中

您可以使用他们的库,使用他们的帖子(或类似文章)来编写一些代码,也可以使用来自Square的优秀库,尽管这可能有些过分

如果有重复的背景…

您尚未提供图像,但如果图像重复,您可以创建一个磁贴,然后将其作为资源提供

例如,您可以创建一个名为background_repeat.XML的新XML文件,其中包含

<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/tile"
android:tileMode="repeat"
android:dither="true" />


其中,
平铺
是要重复的小得多的图像。

您有几个选项,但首先您必须问我为什么要加载这么大的位图

使文件变小

正如@laalto所说,调整图像的尺寸,使其更小。可能是最快最简单的选择。由于我看不到图像,我不能说如果分辨率更小,这是否会让用户觉得它有什么不同

对图像进行下采样

有很多关于对大图像进行下采样以避免
outofmemory
错误的帖子。这是AndroidQuery团队的一个很好的例子,他们自己已经构建了一个包含这种功能的有用工具。这也包括在帖子中

您可以使用他们的库,使用他们的帖子(或类似文章)来编写一些代码,也可以使用来自Square的优秀库,尽管这可能有些过分

如果有重复的背景…

您尚未提供图像,但如果图像重复,您可以创建一个磁贴,然后将其作为资源提供

例如,您可以创建一个名为background_repeat.XML的新XML文件,其中包含

<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/tile"
android:tileMode="repeat"
android:dither="true" />


其中,
tile
是要重复的小得多的图像。

您可以使用android:background从可绘制资源中设置背景。您还可以在xml的根元素上执行此操作:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:id="@+id/fragment_layout"
    android:background="@drawable/navigation_bg"/>

您可以使用android:background从可绘制资源中设置背景。您还可以在xml的根元素上执行此操作:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:id="@+id/fragment_layout"
    android:background="@drawable/navigation_bg"/>


尽可能多地使用较小尺寸的图像尽可能多地使用较小尺寸的图像如果可能,我真的不想丢失图像的分辨率。有没有允许更快加载图像的外部库?如果可能的话,我真的不想丢失图像的分辨率。是否有任何外部库允许更快地加载图像?好的,我裁剪了图像,现在它的大小是360KB(分辨率是1501*2200),但仍然需要花费很长时间(4秒)。你还有其他建议吗?谢谢。试着加快使用AQuery的速度,只要把罐子放进去,然后使用我链接到的帖子。对图像进行下采样。如果它能工作,请决定您是想编写自己的代码还是继续使用AQuery或毕加索等。好的,我裁剪了图像,现在它的大小是360KB(分辨率是1501*2200),但仍然需要花费很长的时间(4秒)。你还有其他建议吗?谢谢。试着加快使用AQuery的速度,只要把罐子放进去,然后使用我链接到的帖子。对图像进行下采样。如果它有效,决定你是想写你自己的代码还是继续使用阿奎里或毕加索等。