如何关闭活动

How to close Activities

我有 4 个活动,每个活动都有不同的对象,可以从服务器获取。主要目的是当我在activity4提交最终数据时,Activity1必须再次调用。我已经测试了几种方法,从 D activity 回到 Main activity 很容易,但我也想清除所有以前的活动,这使得这个问题变得不同。

此时我必须关闭 activity B 和 C。如果我刚刚完成 activity D 并在新意图中启动 Activity A,则之前的 Activity 仍然存在并且每当我想从应用程序回来时,我都可以再次看到这些活动。如何同时关闭多个活动?

用于从 activity D 返回到 activity A 在 onBackPressed() 方法中传递意图。

@Override
     public void onBackPressed() {
            Intent in = new Intent(Activity-D.this,Activity-A.class);
            startActivity(in);
            finish();
        }

使用标志 FLAG_ACTIVITY_CLEAR_TASK and FLAG_ACTIVITY_NEW_TASK 从 Activity D 开始 Activity A 以在创建新的 Activity.

时清除堆栈

你用过下面的标志吗

Intent.FLAG_ACTIVITY_NEW_TASK

Intent intent = new Intent(CLASS_D.this, CLASS_A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

使用 Intent Flags 清除堆栈,

 Intent intent = new Intent(D.this,A.class);  
 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
 startActivity(intent);

然后 Activity A 只会在堆栈中

使用 FLAG_ACTIVITY_CLEAR_TOP Intent Flag 再次使用 -

启动 activity A
Intent intent = new Intent(ActivityD.this, ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

这个标志将从堆栈中清除 B 和 C 并打开 A。

您可以使用 EventBus 来做到这一点。

定义事件class完成Activity

public class FinishActivity{

}

在activity B,C

注册事件

你可以使用

EventBus.getDefault().register(this)

在 onCreate 方法中注册和注销 onDestroy 通过 EventBus.getDefault().unregister(this)。 在 activityB,C.

中创建一个方法
public void onMainThreadEvent(FinishActivity event) {
     finish();
}

你可以通过EventBus.getDefault().post(new FinishAxtivity());Activity发送FinishActivity事件,B,C在发送该事件后将自己完成。

2 行 Activity D 可以施展魔法。

Activity DonBackPressed() 方法中。

添加论文行

@Override
     public void onBackPressed() {    
            startActivity(new Intent(Activity_D.this,Activity_A.class));
            finishAffinity();
        }

FinishAffinity will clear all opened Activities. So only Activity A will remained open

一种可能的方法是使用 startActivityForResult 启动每个 activity,然后在 onActivityResult 回调中处理活动的关闭。

您可以通过不同的方式实现。

  1. 在 activity 声明中使用 noHistory 标志 manifests.xml

    <activity
        android:name=".Acitivity_B"  <!-- do same with activity c and d -->
        android:noHistory="true"/> 
    
  2. 使用 startActivityForResult

    startActivityForResult(intent,101);
    
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
         if (requestCode == 101)
            finish();
    }
    

解决方案: 您可以通过以下步骤关闭任何 activity 来自任何其他 activity 的任何 activity:(按照以下步骤)

Step1:onCreate()之前创建每个Class的静态对象:

public static YourActivityClass activity;

Step2: 然后在你的 onCreate() 初始化它:

activity = YourActivityClass.this

步骤 3: 现在你可以从 activity 你想要的任何一个开始:

YourActivityClass.activity.finish();

同样,您可以为每个 activity 关闭任何其他 activity。

替代方法:只是在意图中不传递任何历史记录:

Intent intent = new Intent(ActivityD.this, ActivityA.class);  
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
finish();

使用该解决方案由您决定。祝一切顺利。