【发布时间】:2013-12-26 11:13:45
【问题描述】:
下面的表格代表了这个问题所涉及的应用程序中的工作流程。
我遇到了 OutOfMemory 错误的问题,主要是因为用户能够多次从活动 B 切换到活动 D(他们每次尝试都显示不同的内容),而之前的活动没有被破坏。这会导致一个非常大的 backstack,从而导致 OutOfMemory 错误。
为避免这种情况,我按照建议将父活动添加到清单并使用 TaskStackBuilder 类创建新的后台堆栈:
void openDFromB()
{
Intent i = new Intent(this, ActivityD.class);
TaskStackBuilder.create(this)
.addParentStack(ActivityD.class)
.addNextIntent(i)
.startActivities();
}
如果用户现在从活动 B 切换到 D,则 MainMenu、A 和 B 被销毁,并创建一个新的 Backstack(MainMenu、C、D)。 这解决了我的 api 级别大于 10 的内存问题,但不幸的是 TaskStackBuilder 不会为 api 11 之前的设备创建 backstacks。
知道如何避免用户在 api 11 之前堆积无限量的活动吗?这是否可能,或者我应该尝试在 onPause 中释放尽可能多的资源,以便在 OoM 之前获得最大数量的堆叠活动?
提前致谢!
【问题讨论】:
标签: java android task out-of-memory heap-memory