在android中,让我们假设我有以下活动
活动A->活动B->活动C->活动D
在某些场景中,我必须直接从活动D导航到活动A(例如:注销场景(。在这种情况下,我使用以下方法清除backstack
并导航到活动A;再次打开应用程序。
// Go to LoginActivity.java
Intent intent = new Intent(this, LoginActivity.class);
intent.addFlag(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
它绝对运行良好!毫无疑问。
我现在需要什么
当我从活动D导航到A时(使用FLAG_ACTIVITY_NEW_TASK
。(我希望执行活动D、C、B的OnDestroy()
方法。但它目前还没有命中/触发。
为什么我希望调用OnDestroy
方法
在清除后堆栈时,我需要从所有活动中调用一个trackevent(取消注册(方法。例如:从活动D、C和B。因此,我希望OnDestroy
方法可以调用(或者任何方法都可以(。请帮我一下?
根据文档
FLAG_ACTIVITY_CLEAR_TOP:如果要启动的"活动"的实例已存在于后堆栈中,则销毁其上的任何其他"活动">并将Intent路由到该现有实例。当与FLAG_ACTIVITY_NEW_TASK一起使用时,此标志将定位任何任务中"活动"的任何现有实例,并将其置于前台。
您可以通过将Intent.FLAG_ACTIVITY_CLEAR_TASK
替换为Intent.FLAG_ACTIVITY_CLEAR_TOP
来实现。
修改后的代码:
Intent intent = new Intent(this, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
因此,将调用后堆栈onDestroy
方法中的所有活动,包括您的LoginActivity's onDestroy
方法,顺序与它们插入的顺序相同。
finishAffinity();
startActivity(new Intent(this,ActivityA.class));
若要在清除后从最后一个(ActivityD(导航到第一个活动(ActivityA(,请尝试上面的代码。
- 使用从后台清除所有活动
- 之后调用活动