android 关闭活动,Android:清除活动

Android:清除活动

我在我的申请中有几项活动。 并且流程非常复杂。 当我点击Logout应用程序naviagates登录屏幕并从那里用户可以通过取消按钮退出(拨打finish())

当我退出或返回按钮时,系统从堆栈调用一个活动:(当我到达登录界面时,如何清除堆栈中的所有活动?调用finish()是不实际的,因为有这么多的活动,一些活动不应该关闭时 它们是活动的,例如本机相机调用活动。

validateuser logoutuser = new validateuser();

logoutuser.logOut();

Intent loginscreen = new Intent(homepage.this, Login2.class);

(homepage.this).finish();

loginscreen.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);

startActivity(loginscreen);

9个解决方案

296 votes

大多数人都错了。 如果要关闭现有的活动堆栈而不管其中的内容是什么并创建新的root,则正确的标志集如下:

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

来自doc:

Context.startActivity()

在API级别11中添加

如果设置在传递给的Intent中   Context.startActivity(),此标志将导致任何现有任务   将与之前要清除的活动相关联   活动开始了。 也就是说,活动成为一个新的根   否则为空任务,任何旧活动都已完成。 这个可以   仅与FLAG_ACTIVITY_NEW_TASK一起使用。

Cynichniy Bandera answered 2019-06-28T23:26:05Z

29 votes

当您在上次活动中拨打Intent.FLAG_ACTIVITY_CLEAR_TOP时,您可以随时使用

Intent.FLAG_ACTIVITY_CLEAR_TOP

作为该意图的旗帜。

阅读更多关于国旗的信息。

David Olsson answered 2019-06-28T23:26:50Z

16 votes

这是一个简单的辅助方法,用于启动新活动,作为从API级别4到当前版本17的新顶级活动:

static void startNewMainActivity(Activity currentActivity, Class extends Activity> newTopActivityClass) {

Intent intent = new Intent(currentActivity, newTopActivityClass);

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)

intent.addFlags(0x8000); // equal to Intent.FLAG_ACTIVITY_CLEAR_TASK which is only available from API level 11

currentActivity.startActivity(intent);

}

从你当前的活动中这样称呼它:

startNewMainActivity(this, MainActivity.class);

whlk answered 2019-06-28T23:27:21Z

6 votes

清除以下代码后面的活动:

Intent intent = new Intent(Your_Current_Activity.this, Your_Destination_Activity.class);

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

startActivity(intent);

完成

Hiren Patel answered 2019-06-28T23:27:47Z

4 votes

就我而言,LoginActivity也被关闭了。 结果是,

Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK

没有帮助。

但是,设定

Intent.FLAG_ACTIVITY_NEW_TASK

帮助过我。

Prashant Gami answered 2019-06-28T23:28:32Z

4 votes

Intent intent = new Intent(LoginActivity.this, Home.class);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //It is use to finish current activity

startActivity(intent);

this.finish();

Sakib Syed answered 2019-06-28T23:28:50Z

3 votes

这个决定很好:

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

但新的活动推出很长时间,你会看到白色的屏幕。 如果这很关键,那么使用此解决方法:

public class BaseActivity extends AppCompatActivity {

private static final String ACTION_FINISH = "action_finish";

private BroadcastReceiver finisBroadcastReceiver;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

registerReceiver(finisBroadcastReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

finish();

}

}, new IntentFilter(ACTION_FINISH));

}

public void clearBackStack() {

sendBroadcast(new Intent(ACTION_FINISH));

}

@Override

protected void onDestroy() {

unregisterReceiver(finisBroadcastReceiver);

super.onDestroy();

}

}

怎么用呢:

public class ActivityA extends BaseActivity {

// Click any button

public void startActivityB() {

startActivity(new Intent(this, ActivityB.class));

clearBackStack();

}

}

缺点:必须在堆栈上关闭的所有活动必须扩展BaseActivity

maXp answered 2019-06-28T23:29:30Z

2 votes

我注意到你要求的解决方案不依赖于ExitHelper.isExitFlagRaised = true;,但我想知道这是否有帮助。

我跟踪是否使用静态类变量引发退出标志,该变量在整个应用程序生命周期中存活。 在每个相关活动的ExitHelper.isExitFlagRaised = true;中,使用

@Override

public void onResume() {

super.onResume();

if (ExitHelper.isExitFlagRaised) {

this.finish();

}

}

ExitHelper类

public class ExitHelper {

public static boolean isExitFlagRaised = false;

}

让我们在mainActivity中说,用户按下按钮退出 - 您可以设置ExitHelper.isExitFlagRaised = true;然后设置finish().此后,自动恢复的其他相关活动也将完成。

Kevin Lee answered 2019-06-28T23:30:17Z

1 votes

对于Xamarin开发人员,您可以使用:

intent.SetFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask);

BYISHIMO Audace answered 2019-06-28T23:30:42Z

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值