1

我有 2 项活动,Activity1并且Activity2. 在Activity1我有一个按钮可以去Activity2

Activity2 有很多 Edittext 和其他 Views。

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

问题是,Activity2如果我按下后退按钮,我会返回Activity1,我的内存进程大约是 59mb,我不需要关于Activity2.

现在,如果我再次单击该按钮,我有一个OutOfMemory.

按下返回按钮时如何强制释放内存?

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

谢谢

4

3 回答 3

1

试试这个....首先关闭您的活动...使用以下代码...

public class ur_clss extends Activity {
private ur_class c1;
//ur content here
     @Override
     public void onBackPressed () {
               c1.finishActivity(0);
     }
}
于 2012-08-21T14:18:25.763 回答
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被执行。
于 2012-08-21T15:02:05.497 回答
0

您需要覆盖BackButton 并在按下它时释放内存。

@Override
public void onBackPressed()
{
Activity.finish() // the activity that you want to terminate
}

或者,还有另一种方法。当您启动新活动时,旧活动会继续 onPause()。您可以尝试调用旧活动的finish()onPause()

于 2012-08-21T14:23:27.537 回答