Android 从堆栈中清除后台活动/活动的正确方法是什么? 正如问题标题所说的,我需要知道什么是最好的方法来“移除”/销毁/完成一个在栈中的某个地方,当前在暂停模式下的活动(不是特定的实例,而是特定的派生类)。
例如:Android 从堆栈中清除后台活动/活动的正确方法是什么? 正如问题标题所说的,我需要知道什么是最好的方法来“移除”/销毁/完成一个在栈中的某个地方,当前在暂停模式下的活动(不是特定的实例,而是特定的派生类)。,android,android-activity,broadcastreceiver,activity-finish,activity-stack,Android,Android Activity,Broadcastreceiver,Activity Finish,Activity Stack,例如: 如果堆栈的当前状态如下所示: ActivityD <-- top of the stack, currently forground ActivityC ActivityA ActivityC ActivityA ActivityD我也有同样的问题。我所做的是,我保留了一个静态数组列表,每当我从一个活动转到另一个活动时,在new activity的onCreate()方法中,我将当前活动的对象添加到该列表中,如下所示: SomeClass.addActivity(Curren
如果堆栈的当前状态如下所示:
ActivityD <-- top of the stack, currently forground
ActivityC
ActivityA
ActivityC
ActivityA
ActivityD我也有同样的问题。我所做的是,我保留了一个静态数组列表,每当我从一个活动转到另一个活动时,在new activity的onCreate()方法中,我将当前活动的对象添加到该列表中,如下所示:
SomeClass.addActivity(CurrentActivity.this);
我在每项活动中都添加了上述声明
addActivity()的名称为:
当我想清除堆栈时,我打电话:
public boolean clearStack() {
for (Activity activity : activityList) {
activity.finish();
}
activityList.clear();
return (activityList.isEmpty());
}
这样,我清除了我的活动堆栈
谢谢:)
我认为这是清除之前所有活动的正确方法…制作一个自定义广播接收器,并在您选择的事件中可以触发的每个活动中注册它。在每个活动的onReceiveMethod中(可以选择),只需调用finish()。在这种情况下,您的活动将从堆栈中删除。此外,您还可以访问此网站以获取更多帮助:
您的解决方案可以工作,但这不是正确的方法。保留对活动的引用是不好的。。。它很容易导致内存泄漏。无论如何,谢谢你的帮助根据:这样做不仅会影响到“YourNextActivitys”课程,而且会影响到他与堆栈中其他实例之间的所有活动你读过我的问题正文了吗?正如我所写的,我现在正在使用这个解决方案。你能告诉我,如果出于某种原因,使用这种解决方案不会导致android固件工程师对以这种方式使用广播接收机大发雷霆吗?很抱歉。我没有正确地阅读你的问题。据我所知,没有这种办法。但很可能我错了。一件事是,如果您不想让某个活动驻留在堆栈中,只需使用“无历史记录”属性启动它,就可以通过代码和xml进行设置。感谢您的回答,我需要我的活动在某些点停留在堆栈中,因此使用“无历史记录”属性对我来说不是一个选项。如果您愿意,我可以更具体地说明促使我需要此要求的情况:我需要处理来自应用程序内外的c2dm推送通知-根据它打开特定屏幕,当跳转到某个活动时-清除“MainMenuActivity”旁边的所有活动这是一个非常古老的问题,但我最近也在想同样的问题。特别是从暂停的活动中调用的“finish()”方法是正确的操作”部分。您的意思是“来自暂停的活动的Activity.finish()方法”,而不是恢复的?
public void addActivity(final Activity activity) {
activityList.add(activity);
}
public boolean clearStack() {
for (Activity activity : activityList) {
activity.finish();
}
activityList.clear();
return (activityList.isEmpty());
}
Intent myintent = new Intent(YourCurrentActivity.this, YourNextActivitys.class);
myintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(myintent);
finish();