Jay*_*ayu 122 stack android android-activity
我在我的应用程序中有几个活动.并且流程非常复杂.当我单击Logout应用程序naviagates登录屏幕时,用户可以通过取消按钮退出(调用system.exit(0))
当我退出或退回按钮时,系统从堆栈调用一个活动:(当我到达登录界面时,如何清除堆栈中的所有活动?调用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);
Run Code Online (Sandbox Code Playgroud)
Cyn*_*era 318
大多数人都错了.如果要关闭现有的活动堆栈而不管其中的内容是什么并创建新的root,则正确的标志集如下:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
Run Code Online (Sandbox Code Playgroud)
public static final int FLAG_ACTIVITY_CLEAR_TASK
在API级别11中添加如果在传递给的Intent中设置
Context.startActivity(),则此标志将导致在活动开始之前清除与活动关联的任何现有任务.也就是说,活动成为否则为空任务的新根,并且任何旧活动都已完成.这只能与FLAG_ACTIVITY_NEW_TASK.一起使用.
whl*_*hlk 16
这是一个简单的辅助方法,用于启动新活动,作为从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);
}
Run Code Online (Sandbox Code Playgroud)
从你当前的活动中这样称呼它:
startNewMainActivity(this, MainActivity.class);
Run Code Online (Sandbox Code Playgroud)
清除以下代码后面的活动:
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);
Run Code Online (Sandbox Code Playgroud)
完成
| 归档时间: |
|
| 查看次数: |
93735 次 |
| 最近记录: |