0

私には、ActivityAとActivityBの2つのアクティビティがあります。

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);
}

ActivityBを開始してそれ自体を終了するActivityAのコードが実行された後、アクティビティライフサイクルコールバックが次の順序で呼び出されました。

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

ここで問題となるのは、ActivityBのonResume()で8秒間のアニメーションが開始されたため、ActivityB.onResume()が呼び出されてから8秒後にActivityA.onStop()が呼び出されたことです。ActivityA.onDestroy()が非常に遅く呼び出され、システムがActivityAのすべてのリソースを長期間保持する必要があったため、アプリでOutOfMemoryErrorが発生しました。

助言がありますか?ありがとう!

4

1 に答える 1

0

私は以前にこの問題を調査していましたが、Android OSは、アクティビティがバックグラウンドに移行するとすぐに破棄されることを保証していないことがわかりました。まず、新しいアクティビティが優先され、初期化されてIDLE状態になります。その後、以前のアクティビティは破棄されます。したがって、そのためのネイティブソリューションはありません。を呼び出すとすぐにonDestroy()が呼び出されることを期待しないでくださいfinish()。それをいつ呼び出すかはすべてOS次第です

これらのスレッドを確認してください-おそらくそれはあなたの問題にいくらかの光を当てるでしょう:

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 に答える