我有一个特定的场景,而不是找到解决方案。 我的活动堆栈为A-> B-> C-> D.从D开始使用时,我想启动活动A并清除堆栈,这是我用标志FLAG_ACTIVITY_CLEAR_TOP启动活动A而实现的。 现在出现了问题: 我的活动B也可以从其他应用程序可以触发的意图开始。在这种情况下,一旦用户处于活动D并且我使用FLAG_ACTIVITY_CLEAR_TOP启动活动A,活动D仍然保留在后台堆栈中,因为活动A不在堆栈中。 有人可以指出如何处理这种情况吗?
先谢谢..
答案 0 :(得分:2)
阅读一次,你将永远不会遇到使用flag_activity_clear_top
的问题以下是有关Flag_Activity_Clear_Top使用情况的简单说明。
正确使用的一个班轮公式:
它总是清除调用活动和被调用活动之间的中间活动(如果有的话)。
这是一个活动流程:
活动A - >活动B - >活动C(使用标志活动清除顶部转到D) - >活动D
在上述序列中,如果我们按下则到达D,那么我们将得到活动C->活动B->活动A,因为活动C和活动D之间没有中间活动
这里的一些开发者的神话是 -
通过使用C中的标记活动清除到达活动D后,他们期望在按下来自D的后退键时将它们带到应用程序之外。这将永远不会发生。
Flag_Activity_Clear_Top始终清除两个活动之间的中间活动(如果有的话)
您可以使用BroadcastReceivers
:
BaseActivity
:public class BaseActivity extends Activity {
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 :(得分:0)
为什么不用FLAG_ACTIVITY_CLEAR_TOP调用活动A然后完成()活动D?