【发布时间】:2011-05-12 05:27:19
【问题描述】:
首先,我确实先将它发布到了 android google 组,但它经过了审核,我不确定它需要多长时间才能出现,所以希望这里的人可以提供帮助。
我在 ListActivity 之后创建了一个带有 ListView 的简单应用 网上找的例子。
该应用程序有 2 个活动,第一个活动有一个按钮来创建 第二。当我点击第二个活动的关闭按钮时,我会 喜欢它释放它的内存(或者至少让它成为垃圾 集)。目前它永远不会发布。
我一定是在这里做错了,因为 MyListActivity 从来没有 被释放。谁能告诉我我是否做错了什么 我的活动被创建/销毁的方式?或者如果我使用 ListView 错了吗?
谢谢。
我的应用作为 zip - http://www.mediafire.com/?l26o5hz2bmbwk6j
Eclipse MAT 的屏幕截图显示列表活动从未释放 内存 - www.mediafire.com/?qr6ga0k
public class MyListActivity extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listlayout);
ListAdapter ada = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, GENRES);
setListAdapter(ada);
}
@Override
public void onDestroy()
{
super.onDestroy();
System.gc();
}
public void ClickHandler(View target)
{
switch (target.getId())
{
case R.id.LL_Btn1:
finish();
break;
}
}
private static final String[] GENRES = new String[] {
"Action", "Adventure", "Animation", "Children", "Comedy", "Documentary", "Drama",
"Foreign", "History", "Independent", "Romance", "Sci-Fi", "Television", "Thriller"
};}
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void ClickHandler(View target)
{
switch (target.getId())
{
case R.id.M_Button01:
Intent intent = new Intent();
intent.setClassName(MyListActivity.class.getPackage().getName(), MyListActivity.class.getName());
startActivity(intent);
break;
}
}}
【问题讨论】:
-
呃...我没有下载 zip,谢谢。能发一下相关的sn-ps吗?
-
是什么让您认为有泄漏? Android 可以让您的活动长时间运行,除非它需要内存。
-
我确定这是内存泄漏的原因是我可以通过打开活动并关闭它来继续这样做直到我的应用程序崩溃。它不会释放内存。 Eclipse 的 MAT 工具显示出对 mContext 的依赖。
-
在生成报告之前,您是否在 DDMS 中尝试过多次 GC?
-
很多很多次。我很肯定这是在泄漏,但我对 android 太陌生,无法说出原因。
标签: java android listview memory-leaks listactivity