【问题标题】:Anmation in onResume blocked another activity's onDestroyonResume 中的动画阻止了其他活动 onDestroy
【发布时间】:2012-07-27 19:39:26
【问题描述】:

我有以下两个活动,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并完成自身的代码运行后,Activity生命周期回调按如下顺序调用:

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

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

有什么建议吗?谢谢!

【问题讨论】:

    标签: android


    【解决方案1】:

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

    检查这些线程 - 可能会对您的问题有所了解:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多