我有一个非常简单的活动:

public class A extends ListActivity implements ListAdapter
{
    @Override public void onCreate(Bundle b)
    {
        super.onCreate(b);
        setListAdapter(this); //no problems without this line
    }
    // etc... (empty implementation ListAdapter interface functions)
}


当我从其他活动开始此活动时:

startActivity(new Intent(this, A.class));


和布什的“后退”按钮(以破坏此活动),堆长约13..15 KB,即使GC解决后也不会减少。
当我再次开始并结束此活动时,头部越来越长。
为了监视堆大小,我在Eclipse中使用DDMS。

我究竟做错了什么?

最佳答案

我真的希望您不要在与Activity相同的类中实现ListAdapter。这不是一个好的编程习惯,并且所有Android教程都创建了单独的类作为适配器。他们当然不会将适配器和活动合并到一个类中。例如,以GridView tutorial为例。

我认为问题出在您说setListAdapter(this)的地方。 “ this”是指ListActivity类A,无论如何它都不是适配器。为了正确使用setListAdapter,您应该传递ArrayAdapter或创建自己的Adapter类(实现ListAdapter,并扩展BaseAdapter)并实例化它。

我认为这可以解决您的问题,因为您可以将视图的适配器设置为活动本身,这在某些情况下似乎是递归的或某种“无限循环”。

关于android - 实现ListAdapter和可能的内存泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5109395/

10-11 09:15