我正在开发一个几乎没有A,B,C,D等视图的Android应用程序。这里D是我的家庭活动。我的导航类似于A-> B-> C-> D。一旦我到达活动D,当我尝试按下后退按钮时,所有先前的活动(A,B,C)应该关闭。我不能像称为呼叫新活动的结束那样开始活动。请提供一种方法来杀死我的申请活动。
这里我使用了一些代码来完成所有活动,但没有得到结果。
ActivityManager manager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> list = manager.getRunningAppProcesses();
if(list != null)
{
for(int i=0;i<list.size();++i) {
if(getApplicationContext().getPackageName().matches(list.get(i).processName)) {
int pid = android.os.Process.getUidForName(getApplicationContext().getPackageName());
android.os.Process.killProcess(pid);
}
else {
debug.log("app not killed");
}
}
}
所以请建议我一次关闭所有活动的正确方法。
先谢谢
答案 0 :(得分:3)
完成它:
Activity_name.this.finish();
为了杀人:
android.os.Process.killProcess(android.os.Process.myPid());
答案 1 :(得分:1)
您可以通过两种方式执行此操作:
当您从活动A开始B活动时,您可以通过这种方式设置标志
Intent i = new Intent(A.this, B.class);
i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);
并从B到C以及从C到D
进行相同的操作或
finish()
这将启动活动B并完成活动A,因此当您单击后退时,您将不会返回A活动。
Intent i= new Intent(A.this, B.class);
startActivity(i);
finish();
答案 2 :(得分:0)
在Activity_D的onPause()
中设置了public static boolean kill = true;
。
现在在活动A,B,C的onResume()
检查是否杀人,然后拨打finish();
onResume() {
super.onResume();
if(Activity_D.kill) {
finish();
}
}
答案 3 :(得分:0)
我对同样问题的解决方法:
声明一个带有活动堆栈的单例,以及一个公共静态clearAll方法,它迭代堆栈,完成所有活动。
然后,我宣布一个StackedActivity扩展Activity,它将在我的应用程序的所有活动中使用。
在StackedActivity onCreate方法中,我将实例添加到堆栈单例中,当我想完成所有操作时,只需调用clearAll方法。
答案 4 :(得分:0)
感谢所有回答我问题的人。最后,我得到了我的问题的解决方案。我通过使用意图Intent.FLAG_ACTIVITY_CLEAR_TOP解决了这个问题。这是我的方案的解释。 假设我在活动D中。我的实际流程是A-> B-> C-> D.i想要杀死我先前的活动A,B,C。当我从活动D开始时,我曾经打电话给我的第一个活动A. 所以我添加了意图FLAG_ACTIVITY_CLEAR_TOP来调用活动A.所以中间活动将被清除,并且只会显示活动A.而且我将一些标志值作为意图额外传递给活动A.这样
Intent intent = new Intent(D.this,A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("finishstatus", true);
this.startActivity(intent);
this.finish();
我正在检查活动A的onCreate方法中的包值
bundle = this.getIntent().getExtras();
if(bundle!= null)
{
boolean isActivityToBeFinish = this.getIntent().getExtras().getBoolean("finishstatus");
if(isActivityToBeFinish)
{
finish();
}
}
如果状态值可用且为真,那么我也完成了活动A.所以我的问题已经解决,我成功地完成了之前的所有活动。
可能是我的解释不好但会完美。
答案 5 :(得分:0)
完全完成申请
我认为您使用的是启动器 - 活动或您的MainActivity来自您不希望恢复应用程序
1.完成您的活动 2.android:excludeFromRecents="true"在清单
答案 6 :(得分:0)
使用
finishActivity()
开始活动后