我有一个非常简单的活动:
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/