activity启动FLAG之FLAG_ACTIVITY_CLEAR_TASK

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

官方文档解释:

If set in an Intent passed to Context.startActivity(), this flag will cause any existing task that would be associated with the activity to be cleared before the activity is started. That is, the activity becomes the new root of an otherwise empty task, and any old activities are finished. This can only be used in conjunction with FLAG_ACTIVITY_NEW_TASK.

翻译:如果在通过Context.startActivity()启动activity时为Intent设置了此标识,这个标识将导致:在此activity启动之前,任何与此activity相关联的task都会被清除。也就是说,此

activity将变成一个空栈中新的最底端的activity,所有的旧activity都会被finish掉,这个标识仅仅和FLAG_ACTIVITY_NEW_TASK联合起来才能使用。

下面给一个例子,看看设置了此标识和不设置有什么区别:

MainActivity:

package com.hom.testflag;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.app.Activity;
import android.content.Intent;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		LinearLayout layout = new LinearLayout(this);
		Button btn = new Button(this);
		btn.setText("跳转到A");
		layout.addView(btn);
		setContentView(layout);
		btn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent(MainActivity.this, ActivityA.class);
				startActivity(intent);
			}
		});
	}

}

ActivityA:

package com.hom.testflag;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;

public class ActivityA extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		LinearLayout layout = new LinearLayout(this);
		Button btn = new Button(this);
		btn.setText("跳转到B");
		layout.addView(btn);
		setContentView(layout);

		btn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent(ActivityA.this, ActivityB.class);
				intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
				startActivity(intent);
			}
		});
	}
}

ActivityB:

package com.hom.testflag;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;

public class ActivityB extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		LinearLayout layout = new LinearLayout(this);
		Button btn = new Button(this);
		btn.setText("ActivityB");
		layout.addView(btn);
		setContentView(layout);
	}
}





 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: flag_activity_clear_task是一个Activity启动模式,它可以清除任务栈中的所有Activity,使得新启动Activity成为任务栈中的唯一Activity。这个标志通常用于启动应用程序的主Activity,以确保用户按下返回键时不会返回到之前的Activity。 ### 回答2: flag_activity_clear_task是Android中的一个标志位,用于启动一个新的Activity时清除Activity堆栈中的所有Activity。 在Android中,每个Activity都会被放置在一个堆栈中,当我们启动新的Activity时,原有的Activity会被保留在堆栈中。当我们按下返回键时,系统会按照堆栈的顺序依次销毁并恢复Activity。 但是在某些情况下,我们可能需要启动一个新的Activity后,清除掉之前所有的Activity,使得用户无法通过返回键回到之前的页面。这时就可以使用flag_activity_clear_task标志位。 当我们使用flag_activity_clear_task标志位启动一个新的Activity时,系统会销毁掉Activity堆栈中的所有Activity,并在堆栈中放置新的Activity,使之成为栈底的Activity。 这种使用场景通常发生在登录功能中。当用户成功登录后,我们需要清除掉登录之前的Activity堆栈,以防止用户通过返回键回到未登录的页面。 我们可以在启动Activity时使用Intent的setFlags方法设置flag_activity_clear_task标志位,示例代码如下: ``` Intent intent = new Intent(this, NewActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); ``` 总之,flag_activity_clear_task是一个非常有用的标志位,可以让我们在需要的时候清空Activity堆栈,并启动一个新的Activity。这样可以提供更好的用户体验,同时满足特定功能需求。 ### 回答3: 在Android中,flag_activity_clear_task是一个用于Intent的标志位。当我们在启动一个Activity时,可以通过在Intent中设置该标志位来实现一些特定的行为。 使用flag_activity_clear_task标志位,可以实现以下效果: 1. 清除任务栈:当我们使用该标志位启动一个Activity时,系统会先清空任务栈中的所有Activity,然后再启动指定的Activity。这意味着在新的Activity启动后,之前在任务栈中的所有Activity都会被销毁,任务栈重新变为空白状态。 2. 单一实例:如果我们在Manifest文件中设置了一个Activity的launchMode为singleTask,并且在启动Activity时使用了flag_activity_clear_task标志位,那么系统会先清空任务栈中的所有Activity,然后再创建一个新的实例来启动Activity。这样可以确保该Activity在任务栈中只存在一个实例。 总之,flag_activity_clear_task标志位可以用于清除任务栈中的Activity,重新创建一个新的任务栈,或者确保某个Activity在任务栈中只有一个实例。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

u010142437

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值