我有以下两个活动: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中的所有资源。
有什么建议吗?谢谢!
答案 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