[英]Best way to handle Activity Stack on Android
我有一个特定的场景,并且不希望找到解决方案。 我的活动堆栈为A-> B-> C-> D。 使用完成后,从D开始,我想启动活动A,并用标志FLAG_ACTIVITY_CLEAR_TOP清除通过启动活动A实现的堆栈。 现在出现问题了:我的活动B也可以从其他应用程序可以启动的意图启动。在这种情况下,一旦用户进入活动D并且我以FLAG_ACTIVITY_CLEAR_TOP启动活动A,活动D仍保留在后台堆栈中,就像活动A一样不在堆栈中。 有人可以指出如何处理这种情况吗?
提前致谢..
只需阅读一次,就不会在使用flag_activity_clear_top时遇到问题
这是有关Flag_Activity_Clear_Top用法的简单说明。
正确使用的一种内胆配方:
它始终清除调用活动和被调用活动之间的中间活动(如果有)。
这是一个活动流程:
活动A->活动B->活动C(使用标志活动清除顶部转到D)->活动D
在上面的序列中,如果我们按回去,则到达D时,将获得活动C->活动B->活动A,因为活动C和活动D之间没有中间活动
一些开发人员的神话是-
通过使用C的活动标记清除活动D到达活动D之后,他们期望按D上的Back键会将其带到应用程序外部,这将永远不会发生。
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);
为什么不使用FLAG_ACTIVITY_CLEAR_TOP调用活动A,然后结束活动D?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.