下表表示此问题所涉及的应用程序中的工作流程。
我遇到了 OutOfMemory 错误的问题,主要是因为用户能够多次从 Activity B 切换到 Activity D(每次尝试都显示不同的内容),而没有破坏之前的 Activity 。这导致了一个非常大的后台堆栈,导致了 OutOfMemory 错误。
为避免这种情况,我按照建议将父 Activity 添加到 list 并使用 TaskStackBuilder 类创建新的后台堆栈:
void openDFromB()
{
Intent i = new Intent(this, ActivityD.class);
TaskStackBuilder.create(this)
.addParentStack(ActivityD.class)
.addNextIntent(i)
.startActivities();
}
如果用户现在从 Activity B 切换到 D,MainMenu、A 和 B 将被销毁,并创建一个新的 Backstack(MainMenu、C、D)。 这解决了我的 api 级别大于 10 的内存问题,但不幸的是,TaskStackBuilder 不会为 api 11 之前的设备创建 backstack。
知道如何避免用户在 api 11 之前堆叠无限量的 Activity 吗?这是否可能,或者我应该尝试在 onPause 中释放尽可能多的资源,以便在 OoM 之前获得最大数量的堆叠 Activity ?
提前致谢!
最佳答案
试试这个-
Intent intent = new Intent(getApplicationContext(),yourActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
另一种解决方案是-
在 list 文件中的 Activity 上设置 android:noHistory="true"
将在导航离开时从堆栈中删除 Activity。
但最合适的方法是在您开始新 Activity 时调用 finish()
方法,如下面的示例代码-
Intent intent = new Intent(this, yourActivity.class);
startActivity(intent);
finish();
您还可以创建自定义广播接收器并将其注册到可以根据您选择的事件触发的每个 Activity 中。 For more help you can check this link .
关于java - Android:OutOfMemory 错误和后台堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20469023/