按下后退按钮时释放Android上的内存

时间:2012-08-21 14:11:56

标签: android memory back-button

我有2项活动,Activity1Activity2。在Activity1我有一个按钮可以转到Activity2

Activity2有很多Edittext和其他视图。

当我启动应用程序时,进程的内存为10mb。如果我点击按钮并加载Activity2,我的记忆过程大约是59mb。

问题是,在Activity2中,如果我按下后退按钮,我将返回Activity1并且我的记忆过程大约为59mb,我不需要有关Activity2的此信息

现在,如果我再次点击按钮,我会有OutOfMemory

当我按下后退按钮时,如何强制释放内存?

我尝试拨打finish()System.gc(),但它不起作用。

谢谢

3 个答案:

答案 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();
     }
 }

使用此代码,我解释一下:

  • 实际情况是,Activity1调用TabActivity,它具有Activity2。 Activity2加载了很多寄存器,我是异步执行的。我在Activity2和TabActivity上覆盖onKeyDown,但似乎只有onKeyDown的Activity2被执行。