如何关闭所有打开的活动并从 Java Class 打开一个新活动

How to close all open Activities and open a new one from a Java Class

我创建了一个从 CountDownTimer 扩展而来的 class,它有一个方法 onFinish(),当 timer 过期时调用。

有 6 个活动,用户可以在任何 activity 计时器到期时,所以在 CounterTimerFinish() 方法调用时,我需要显示一个 Alert Message给用户,我需要将用户重定向到 Login 页面。

事情变得混乱,因为我无法在 Normal Class 中调用 Intent class,我也无法传递 context,因为用户可以在任何 activity 中。

我写了下面的代码,但没有用。

我在这里使用上下文,但是它在将 context 传递给 Intent 时给出错误消息

public  class CounterClass extends CountDownTimer implements ITMServiceEvent {

  @Override
    public void onFinish() {
        if(sql_code.equalsIgnoreCase("0")) {
            String resultCode = command1.getString("result");
            context.startActivity(context.getApplicationContext(), MainActivity.class);
            }

在向导开始时在片段中调用计时器

CounterClass counterClass= new CounterClass(180000,1000);
counterClass.setTextView(tvTimer);
counterClass.start();

你的问题有两个部分,首先是如何清理 Activity 堆栈并在它们之上开始一个新的 Activity,我想这将是 LoginActivity 在你的情况下。

为此,您需要设置登录标志Activity Intent 当您想要启动它时,

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);

第二部分是,您希望在向用户显示对话框后能够完成当前 activity。我假设您的计时器是一个在后台运行的服务 Class。告诉当前 activity 时间到了的方法!是发送广播消息。最好 LocalBroadcastManager 可以帮助你。您可以拥有一个基础Activity class,您的所有 6 个活动都可以从中扩展,您可以 register/unregister LocalBroadcastManager to/from BaseActivity class(在onResume中注册,在onPause中注销)。注册它们后,您只需实施和处理 onReceive 方法,您可以在其中显示一个对话框并在完成当前对话框后启动 LoginActivity