android清空活动栈,android – 清除活动历史堆栈

本文介绍了解决Android应用中活动历史堆栈不清空的问题。通过巧妙地利用Intent标志和额外的数据传递,确保用户注销后返回登录界面,同时清空之前的活动记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在尝试清除活动历史堆栈,当用户点击注销按钮时甚至尝试使用IntentFlag Intent.FLAG_ACTIVITY_NO_HISTORY但没有运气.看看我下面提到的场景.

1)登录界面(通话结束)

2)第一个屏幕(不叫完成)

3)第二个屏幕(不叫完成)

4)第三屏(不叫完成)

5)退出屏幕(将打开登录界面,完成)

为了实现我的目标m使用下面的代码,

登录屏幕

btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent=new Intent(MainActivity.this,FirstActivity.class);

startActivity(intent);

finish();

}

});

登录回事件

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK) {

if (getIntent().getBooleanExtra("EXIT", false)) {

this.finish();

}else{

this.finish();

}

return true;

}

return super.onKeyDown(keyCode, event);

}

第一个屏幕

btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent=new Intent(FirstActivity.this,SecondActivity.class);

startActivity(intent);

}

});

第二个屏幕

btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent=new Intent(SecondActivity.this,ThirdActivity.class);

startActivity(intent);

}

});

第三个屏幕

btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent=new Intent(ThirdActivity.this,MainActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.putExtra("EXIT", true);

startActivity(intent);

finish();

}

});

问题是,当我点击退出时,它进入登录活动,当我点击后退按钮时,它进入第二个活动.

为什么它没有完成活动,也为什么它进入第二个活动,如果它维护堆栈然后它应该进入第一个活动而不是第二个当我从登录屏幕点击回来,不知道我错过了什么样的事情.

更新

如果我从登录屏幕调用意图时删除finish(),一切都工作正常,但我不想保持在堆栈登录屏幕.

你的建议很有意义.

解决方法:

你可以为这个问题做一个技巧.我用过它并且和我一起工作.

在ThreeActivity onclick中写下以下代码行.

btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent=new Intent(ThirdActivity.this,FirstActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

intent.putExtra("GO", false);

startActivity(intent);

finish();

}

});

在FirstActivity类的OnCreate中写下代码之后:

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

// Getting the Value of GO

GO = getIntent().getExtras().getBoolean("GO");

if(GO){

setContentView(R.layout.form_data);

...

// Here your Code for this Activity

...

}else{

Intent intent=new Intent(FirstActivity.this,MainActivity.class);

startActivity(intent);

finish();

}

}

同时从MainActivity调用FirstActivity时将GO的Extra值设为true,如下所示

btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent=new Intent(MainActivity.this,FirstActivity.class);

intent.putExtra("GO", true);

startActivity(intent);

finish();

}

});

希望它能解决你的问题.

标签:android,android-activity

来源: https://codeday.me/bug/20190529/1180129.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值