繁体   English   中英

在Android上处理活动堆栈的最佳方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM