首先,我确实将这个帖子发布到Android谷歌小组,但是它已经过主持,我不知道在那里出现需要多长时间,所以希望有人可以提供帮助。
我使用ListActivity之后的ListView创建了一个简单的应用程序 我在网上找到的例子。
该应用有2个活动,第一个有一个按钮来创建 第二。当我点击第二个活动的关闭按钮时,我会 喜欢它释放它的内存(或至少让它成为垃圾 集)。目前它永远不会发布。
我必须在这里做错事,因为MyListActivity永远不会 得到释放。任何人都可以告诉我,如果我做错了什么 我的活动创建/销毁的方式?或者如果我使用的话 ListView错了吗?
感谢。
我的应用为拉链 - 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;
}
}}
答案 0 :(得分:0)
您是否尝试过摆脱System.gc()并看看会发生什么?调用System.gc()只是告诉VM启动垃圾收集 - 不能保证何时完成。
答案 1 :(得分:0)
不确定这是否会有所帮助,通常不建议这样做,但以下内容会在onDestroy()中终止你的进程:
System.runFinalizersOnExit(真); android.os.Process.killProcess(android.os.Process.myPid());
将它放在onDestroy方法中。现在,如果从子活动调用(实际上没有测试它),这实际上可能会杀死您的主进程。
警告:我一般不建议这样做是一种“黑客”方式,但如果你只需要你的应用程序(或活动)在退出时关闭,那么这将有效。您仍然需要进行调试,以找出您的应用保持开放和吃内存的原因。
答案 2 :(得分:0)
Eclipse MAT是原因。新的Android Studio不会导致这些问题。