我已经完成了对SO的阅读和搜索,但无法找到清除当前活动堆栈的方法。我的应用程序的上下文是由后台服务/通知启动的活动。
想象一下,我的应用程序允许您组织人员列表。几个小时前,您在“查看”活动中查看 person X ,现在它已成为您的堆栈顶部。在将来的某个时刻,服务会触发,我会为 person Y 弹出一个新的“通知”活动。从那里你可以编辑人Y的详细信息。
当您完成此活动时,弹出堆栈并最终查看X人员将是一种令人困惑的用户体验。理想情况下,我想回到用户正在做的任何事情(电子邮件等...),或者至少到我应用的家里。
我尝试使用FLAG_ACTIVTY_NEW_TASK
启动“通知”,但这似乎没有帮助:当任务完成时,它只是返回上一个任务。我想要的似乎是Android 3的新FLAG_ACTIVITY_CLEAR_TASK
,这在以前的SDK中不存在。
有没有人有建议去实现这个目标?
答案 0 :(得分:20)
只需杀死所有!
您可以使用BroadcastReceivers
:
BaseActivity
:public class BaseActivity extends GuiceActivity {
private KillReceiver mKillReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mKillReceiver = new KillReceiver();
registerReceiver(mKillReceiver,
IntentFilter.create("kill", "spartan!!!"));
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mKillReceiver);
}
private final class KillReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
}
}
BaseActivity
。Intent intent = new Intent("kill");
intent.setType("spartan!!!");
sendBroadcast(intent);
答案 1 :(得分:6)
如果您已经在堆栈中运行了应用程序主页的实例,则当活动Y完成时,您可以使用标记startActivity()
启动应用程序的主页(使用FLAG_ACTIVITY_CLEAR_TOP
)。由于它已经在堆栈中,而不是创建它的新实例,这将带您回到应用程序的主页并在其上清除堆栈。
答案 2 :(得分:0)
获取ArrayList并将所有活动对象保存到每个活动的oncreate()中的arraylist中。每当您想要完成特定活动时,只需从arraylist中检索该活动实例并完成该活动。