Intent.FLAG_ACTIVITY_CLEAR_TOP不会删除活动堆栈

Jun*_*ned 19 android android-intent

我正在开发应用程序,我想在按钮点击关闭整个应用程序.我知道在android中我们不应该考虑关闭应用程序,因为android会自动执行此操作退出应用程序不满意吗?.但我想关闭我的申请.

所以我正在做什么来关闭应用程序是我使用Intent.FLAG_ACTIVITY_CLEAR_TOP标志来删除活动堆栈.

Intent intent = new Intent(Activity3.this, FinishActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
Run Code Online (Sandbox Code Playgroud)

FinishActivity.class我打电话的onCreate,this.finish()但应用程序没有关闭,之前的活动重新打开.

FinishActivity.class

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    this.finish();
}
Run Code Online (Sandbox Code Playgroud)

更新:

这是场景

MainActivity->Activity2->Activity3->FinishActivity
Run Code Online (Sandbox Code Playgroud)

Activity2是在完成活动后打开的.

我如何实现这一目标?任何想法和建议将不胜感激.

感谢和问候

Iss*_*ZH. 34

试一试.这应该清除您的活动堆栈.

Intent i = new Intent(this,MyActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)


ken*_*484 20

这最终100%的时间对我有用.我独立尝试了所有标志,从未适用于所有代码实例.使用我想要这个功能的所有标志,大约5个不同的地方,现在它可以工作.

            Intent intent = new Intent(actvSignIn.this, actvNearbyPlaces.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(intent);
            finish();
Run Code Online (Sandbox Code Playgroud)


Hul*_*ulk 19

用这个 -

 Intent intent = new Intent(Activity3.this, FinishActivity.class);
 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
 Intent.FLAG_ACTIVITY_NEW_TASK);
 intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
 startActivity(intent);
 finish();
Run Code Online (Sandbox Code Playgroud)

编辑 - 新的答案,将完美地工作..

举一个例子......相应地做你的项目需要 -

我正在服用三个ActivityA,B和C类.我在C类活动的视图中应用了一个关闭按钮.如果你想通过后退按钮然后你可以转到上一个活动,当你按下关闭按钮然后你会退出应用程序..看看 -

public class AActivity extends Activity {

  /** Called when the activity is first created. */
  @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent i = new Intent(this, B.class);
    startActivityForResult(i, 1);
}

@Override
protected void onActivityResult(final int requestCode,
        final int resultCode, final Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    if (resultCode == 5) {
        finish();
    }
}
}
Run Code Online (Sandbox Code Playgroud)

参加下一堂课 -

   public class B extends Activity {
    /** Called when the activity is first created. */
   @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.b);

    Intent i = new Intent(this, C.class);
    startActivityForResult(i, 2);
}

@Override
protected void onActivityResult(final int requestCode,
        final int resultCode, final Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    if (resultCode == 5) {
        setResult(5);
        finish();
    }
}
}
Run Code Online (Sandbox Code Playgroud)

采取最后的活动 -

    public class C extends Activity {
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.c);
}

    // close button..set by xml view..you can set it by button listener.
public void close(View v) {
    setResult(5);
    finish();
}
}
Run Code Online (Sandbox Code Playgroud)

希望它能解决你的问题.

  • 嘿juned我解决了你的问题---使用startActivityForResult(); instread of using startActivity(); ... ok在启动并设置结果时对每个活动使用它. (2认同)