Android在显示视图时如何管理内存?

时间:2013-02-28 04:56:54

标签: android performance memory gridview

我想知道在将视图加载到布局中以及何时显示它们然后未在屏幕上显示时Android如何管理内存。

基本上我正在创建一个需要非常长的页面填充位图和文本的应用程序 - 类似于网页。我知道我应该使用GridView和ListView等标准视图来处理大量的视图和图像,但这是一个利基应用程序。 (设计是一成不变的)

说我有这个布局

<ScrollView>
    <LinearLayout>
        1000 ImageViews vertically stacked inside here.
    </LinearLayout>
</ScrollView>

当加载ScrollView时,并非所有的ImageView都适合屏幕 - 屏幕上没有的ImageView位图是否仍然加载到内存中?如果没有,当它们滚动到视图中然后滚出视图,它们将被从内存中删除?

NB:我知道GridViews / ListViews是为此目的而设计的,但我的应用程序有一个特殊的设计,无法容纳这些视图。

潜在解决方案:扩展gridview,使其具有固定的高度,并且在其包含的ScrollView到达底部之前不会滚动。即:

<ScrollView>
    <LinearLayout>
        Lots of text and a few images.
        <GridView> <-- attach listener so that touch events are 
        ignored until at bottom of scroll view -->
            1000s of ImageViews
        </GridView>
    </LinearLayout>
</ScrollView>

1 个答案:

答案 0 :(得分:0)

是的,即使它们不可见,它们也会被加载到内存中。在不使用ListView和延迟加载图像的情况下执行此操作可能会导致您的应用程序在内存不足的设备上耗尽内存并崩溃。

此外,你的潜力是不可行的,因为将滚动内容滚动到滚动的其他东西总是一个坏主意,并将导致很多麻烦与获得正确的触摸事件和准确处理它们有关。 See this answer