内存中的Android活动实例甚至在销毁活动后也是如此

时间:2012-08-03 10:28:00

标签: android android-activity

Eclipse MAT直方图显示,即使在启动MemTweaksActivity后,SplashActivity实例仍然存在。任何人都对此有所了解。

公共类SplashActivity扩展了Activity {

@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

    new Timer().schedule(new TimerTask() {

                @Override
                public void run() {
                    Intent i = new Intent(getApplicationContext(), MemTweaksActivity.class);
                    startActivity(i);
                    finish();

                }
            },2000);

}

}

但是以下代码中没有任何计时器成功删除了SplashActivity实例。 MAT显示了0个SplashActivity实例。

Intent i = new Intent(getApplicationContext(), MemTweaksActivity.class);       startActivity(i); finish();

1 个答案:

答案 0 :(得分:0)

在您的SplashActivity中添加生命周期调用onPause()onStop()onDestroy()的日志记录。您将看到在运行MemTweaksActivity之前/之后的某个时刻调用它们。当感觉需要时,垃圾收集器将从内存中删除SpashScreen活动。你不能强迫这种情况发生。

修改

SplashScreenActivity仍然存在的原因是因为你没有清理Timer。

这样做:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final Timer timer = new Timer();
    timer.schedule(new TimerTask() {        
        @Override
        public void run() {
            Intent i = new Intent(getApplicationContext(), MemTweaksActivity.class);
            startActivity(i);
            finish();
            // Release timer resources
            timer.cancel();         
        }
    },2000);
}