我有2项活动,Activity1
和Activity2
。在Activity1
我有一个按钮可以转到Activity2
。
Activity2有很多Edittext和其他视图。
当我启动应用程序时,进程的内存为10mb。如果我点击按钮并加载Activity2
,我的记忆过程大约是59mb。
问题是,在Activity2
中,如果我按下后退按钮,我将返回Activity1
并且我的记忆过程大约为59mb,我不需要有关Activity2
的此信息
现在,如果我再次点击按钮,我会有OutOfMemory
。
当我按下后退按钮时,如何强制释放内存?
我尝试拨打finish()
和System.gc()
,但它不起作用。
谢谢
答案 0 :(得分:1)
尝试这个...... 先关闭你的活动...... 使用以下代码...
public class ur_clss extends Activity {
private ur_class c1;
//ur content here
@Override
public void onBackPressed () {
c1.finishActivity(0);
}
}
答案 1 :(得分:0)
你需要覆盖 BackButton并在按下时释放内存。
@Override
public void onBackPressed()
{
Activity.finish() // the activity that you want to terminate
}
或者,还有另一种方法可以做到这一点。当您启动新活动时,旧活动将继续执行onPause()。您可以尝试在旧活动的finish()
中调用onPause()
。
答案 2 :(得分:0)
这是代码的结构:
public class Activity2 extends Activity {
// Global variables
private CarregaOperacions carrega_operacions;
private TableLayout taula;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Some code of UI
// Show a ProgressBar
loadProgress();
carrega_operacions = new CarregaOperacions(Activity2.this);
carrega_operacions.execute(null);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
finish();
}
return super.onKeyDown(keyCode, event);
}
static class CarregaOperacions extends AsyncTask<Void, Void, Void> {
WeakReference<Activity2> context;
Activity2 act;
public CarregaOperacions(Activity2 activity) {
context = new WeakReference<Activity2>(activity);
act = context.get();
}
@Override
protected Void doInBackground(Void... arg0) {
act.carregaOperacions();
return null;
}
protected void onPostExecute(Void result) {
ArrayList<LinearLayout> llista = act.getLlistaFiles();
for (int i = 0; i < llista.size(); i++ ) {
act.getTable().addView(llista.get(i));
}
act.getScroll().setVisibility(View.VISIBLE);
act.treuProgres();
}
}
使用此代码,我解释一下: