0

我有以下两个活动,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.onResume() 后 8 秒调用了 ActivityA.onStop(),因为 ActivityB 的 onResume() 中启动了 8 秒动画。它在我的应用程序中导致了 OutOfMemoryError,因为 ActivityA.onDestroy() 被调用得很晚,系统不得不长时间持有 ActivityA 中的所有资源。

有什么建议么?谢谢!

4

1 回答 1

0

我之前调查过这个问题,发现 Android 操作系统不保证活动一进入后台就会被销毁。首先,将优先考虑新的活动进行初始化并进入空闲状态。只有在那之后,您以前的活动才会被破坏。因此,没有本机解决方案。您不应该期望 onDestroy() 会在您调用finish(). 何时调用它完全取决于操作系统

检查这些线程 - 可能它会阐明您的问题:

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

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

于 2012-07-27T20:02:48.223 回答