onResume中的动画阻止了另一个onDestroy活动

时间:2012-07-27 19:39:26

标签: android

我有以下两个活动:ActivityA和ActivityB。

在ActivityA.java中

startActivity(new Intent(this, ActivityB.class));
finish();

在ActivityB.java中

public void onResume() {
    super.onResume();
    anim1 = new TranslateAnimation(0, 0, fromYDelta, -height);
    anim1.setDuration(8000);
    anim1.setFillAfter(true);
    anim1.setStartOffset(0);
    aView.startAnimation(anim1);
}

在ActivityA中启动ActivityB并完成自身的代码运行后,活动生命周期回调按此顺序调用:

ActivityA.onPause();
ActivityB.onStart();
ActivityB.onResume(); //Start 8 seconds animation here
ActivityA.onStop();
ActivityA.onDestroy();

现在的问题是ActivityB.onStop()在调用ActivityB.onResume()8秒后被调用,因为在ActivityB的onResume()中启动了8秒动画。它在我的应用程序中导致OutOfMemoryError,因为ActivityA.onDestroy()被调用很晚,系统必须长时间保存ActivityA中的所有资源。

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我之前正在调查此问题,并发现Android操作系统无法保证活动一旦进入后台就会被销毁。首先,将优先考虑新活动以进行初始化并进入IDLE状态。 仅在后才会销毁您之前的活动。 所以没有原生的解决方案。一旦调用finish(),就不应该期望调用onDestroy()。完全由操作系统来调用它

检查这些主题 - 可能会对你的问题有所了解:

https://groups.google.com/forum/?fromgroups#!topic/android-developers/aDa7fiVL2Zg

https://groups.google.com/forum/?fromgroups#!topic/android-developers/jkj_PvE9O1A