如何结束活动

时间:2018-11-06 04:43:14

标签: android android-activity android-lifecycle

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

App Activity cycle

这一次,我必须关闭活动B和C。如果我刚刚完成活动D并以新的意图启动活动A,则先前的活动仍然有效,只要我想从应用程序回来,我都可以再次看到这些活动。如何同时关闭多个活动?

Final purpose

10 个答案:

答案 0 :(得分:1)

在创建新的活动时,使用标志FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_NEW_TASK从活动D开始活动A,以清除堆栈。

答案 1 :(得分:1)

您使用了以下标志

  

Intent.FLAG_ACTIVITY_NEW_TASK

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

答案 2 :(得分:1)

使用意图标志清除堆栈,

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

然后,活动A仅位于堆栈中

答案 3 :(得分:1)

使用FLAG_ACTIVITY_CLEAR_TOP Intent标志再次使用-开始活动A。

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

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

答案 4 :(得分:1)

活动D上的2行可以发挥作用。

在您的onBackPressed()的{​​{1}}方法中。

添加这些行

Activity D
  

FinishAffinity 将清除所有打开的活动。因此只有活动A保持打开状态

答案 5 :(得分:1)

解决方案:您可以通过执行以下操作来关闭任何其他活动:(请按照以下步骤操作)

步骤1:onCreate()之前创建每个类的静态对象:

public static YourActivityClass activity;

第二步:,然后在您的onCreate()中对其进行初始化:

activity = YourActivityClass.this

第3步:现在,您可以从任何活动中完成它:

YourActivityClass.activity.finish();

类似地,您可以针对要关闭的任何其他活动执行此操作。

备用方法:仅在意图中不传递任何历史记录:

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

使用解决方案的选择取决于您。一切顺利。

答案 6 :(得分:0)

用于从活动D返回活动A的意图是通过onBackPressed()方法传递。

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

答案 7 :(得分:0)

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

定义事件类FinishActivity

public class FinishActivity{

}

在活动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());发送FinishActivity事件,活动B,C将在发送该事件后自行完成。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

您可以通过不同的方式实现这一目标。

    noHistory上的活动声明中使用
  1. 使用 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();
    }