我谷歌它,但即使我在下面运行此代码,它也没有完成其他活动。
ButtonClick.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
LoginManager.getInstance().ctrl = false;
UserManager.getInstance().loginControl();
OrderManager.getInstance().orderCtrl = false;
Intent intent = new Intent(OrderComplete.this,
MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
finish();
}
});
}
答案 0 :(得分:23)
清除代码
下方堆栈使用的热门活动Intent intents = new Intent(A.this, B.class);
intents.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TOP
| IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intents);
finish();
它将从堆栈中删除所有活动,或者在应用程序中运行asynctask。
它运作良好,也是一种很好的方法
答案 1 :(得分:7)
更新请参阅其他答案,我无法删除答案,因为它被标记为已接受
根据我们在评论中的讨论
您的代码很好!
<强> Q1。为什么不完成所有活动?
Ans。我认为All Activities Are Finished
Except Activities
Thread or AysncTask
在后台运行或尚未完成!
<强> Q2。我怎么能完成它们?
Ans。确保你的线程应该完成!或You can Try Timeout etc
!
其他强>
Pass String with Your Intent
添加代码
intent.putExtra("finishingallact", "yes");
内部第一项活动(尚未完成)
尝试使 Object of Remaining Activities
完成它们!
所以试用代码:
if(getIntent().getStringExtra("finishingallact")!=null)
{
if(getIntent().getStringExtra("finishingallact").toLowerCase().equals("yes"))
{
yourRemainingAct act1=new yourRemainingAct();
act1.finish();
// Try Same For ALl Remaining Activities
}
}
答案 2 :(得分:6)
当您从一个活动转到其他活动时,请致电完成();
喜欢这个
public void onClick(View v) {
Intent i = new Intent(A.this,B.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
finish(); // to end the current activity
}
在startactivity(...)之后调用finish(),以便从堆栈中删除一个活动ll。按下后退按钮A活动ll不在堆栈中。
答案 3 :(得分:5)
试试这个,我可以正常使用
// clear whole activity stack
Intent intent = new Intent("clearStackActivity");
intent.setType("text/plain");
sendBroadcast(intent);
// start your new activity
Intent intent = new Intent(OrderComplete.this,
MainActivity.class);
startActivity(intent);
<强>更新强>
抱歉,我忘了给这些台词。将这些行放在所有活动的onCreate()方法中,或者如果你有任何基本活动,你可以把它放在那里,那么就不需要放入所有活动。private KillReceiver clearActivityStack;
clearActivityStack = new KillReceiver();
registerReceiver(clearActivityStack, IntentFilter.create("clearStackActivity", "text/plain"));
<强>更新强>
很抱歉再忘记将这个课程放在你的基础活动
中private final class KillReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
}
答案 4 :(得分:4)
除了第一个活动
之外,只删除堆栈中的所有活动youractivity.this.finish();
或者您可以使用Activity Single顶部。 为此你可以使用:
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
答案 5 :(得分:4)
要在打开新活动时删除所有活动,请执行以下操作
Intent intent = new Intent(getApplicationContext(), NewAcivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
答案 6 :(得分:2)
我们可以使用:
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
答案 7 :(得分:0)
从清单中删除android:launchMode =“singleTop”并使用setFlag intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
答案 8 :(得分:0)
1.如果我们的类中没有asynctask类或线程,那么只需
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
编写此代码,可以轻松删除堆栈中的所有活动
2.这也可以通过将启动器活动设为单一任务来完成 这可以通过清单文件中的更改来完成。 如
android:launchMode="singleTask"
3.但是如果我们的应用程序中有asynctask并且还使用了线程,则上述两种方法都会失败..
为此我们必须逐个完成活动
例如。 我们有四个活动A,B,C,D,每个班级都有异步任务
,我们必须从A - &gt; B-&GT; C-&GT; d 强>
来自D我们再次回到* “A” ,按下设备的后退按钮应用程序应该完成或者可以说退出< / EM> *
为此,我们必须制作所有类活动的静态对象。像
**In class A**
public static Avtivity mactivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
mactivity=this;
}
在所有B,C类
中执行此操作然后在D
按下按钮 完成所有类的对象 像
** mButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v)
{
B mB=new B();
mB.mactivity.finish();
//////do this for all class which are present in stack of activities
finish();
////this will finish the D class and we reach at A class
}
});**
多数民众赞成解决......
我知道它不是一种粗鲁的方式,但也不是一种糟糕的方式......主要的是它的工作方式:)