我正在使用ImageView
制作一个1.3 MB的图像作为活动的背景。活动有另一个较小的图像(徽标)和3个按钮。那项活动没有别的。现在此活动最多需要9秒才能显示。直到那时应用程序显示黑屏。当我使用1.3 MB图像删除ImageView时,活动立即加载。因此,ImageView加载图像需要这么长时间才是正常的吗?我怎样才能减少这段时间?
答案 0 :(得分:5)
你有几个选择,但首先你必须问为什么我要加载这么大的位图?
缩小文件
正如@laalto所说,调整图像的尺寸并使其更小。可能是最快,最简单的选择。由于我无法看到图像,所以如果分辨率较小,这是不会让用户看起来与用户有任何不同。
缩小图像
下载大型图片时有大量帖子可以避免outofmemory
错误。 Here是AndroidQuery团队的一个很好的例子,他们自己就已经构建了一个包含这种功能的有用library。这也包含在帖子中。
你可以使用他们的库,使用他们的帖子(或类似的)来编写一些代码,或者你可以使用Square的优秀Picasso库,尽管它可能有点过分。
如果有重复的背景......
您尚未提供图像,但如果重复图像,则可以创建图块,然后将其作为资源提供。
因此,举例来说,您可以创建一个名为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
是要重复的小得多的图像。
答案 1 :(得分:1)
是的,这很正常。必须对图像进行解码和缩放。它需要处理时间和内存。内存处理会不时地触发垃圾收集,从而进一步减慢进程。使用分析器确切地找出花费的时间。
使图像尺寸更小,使解码更快,消耗更少的内存。
答案 2 :(得分:0)
您可以使用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"/>