【问题标题】:How does Android manage memory when views are displayed?显示视图时Android如何管理内存?
【发布时间】:2013-02-14 04:32:00
【问题描述】:

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

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

假设我有这个布局

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

加载 ScrollView 时,并非所有 ImageView 都适合屏幕 - 不在屏幕上的 ImageView 位图是否仍加载到内存中?如果不是,当它们被滚动到视图中时,它们会从内存中移除?

注意:我知道 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>

【问题讨论】:

    标签: android performance memory gridview


    【解决方案1】:

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

    另外,你的潜力是行不通的,因为将滚动的东西放在其他滚动的东西中总是一个坏主意,并且会导致很多与获取正确的触摸事件和准确处理它们相关的麻烦。 See this answer.

    【讨论】:

    • 是的,这就是我认为可能发生的事情。
    • 感谢您的更新。我过去在滚动视图中放置了滚动视图 - 可以做到stackoverflow.com/questions/9804230/…(我的回答)
    • 谢谢,如果没有人能更好地阐明这一点,将奖励这一点
    猜你喜欢
    • 1970-01-01
    • 2023-01-07
    • 2016-01-31
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2023-04-08
    • 2013-04-02
    相关资源
    最近更新 更多