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