2011-08-31 33 views
1

它不建议直接退出应用程序,所以关键是使一切顺利的背景和用户返回到主屏幕完成所有活动。我的问题是我的主要活动,它总是与标志Intent.FLAG_ACTIVITY_CLEAR_TOP推出| Intent.FLAG_ACTIVITY_SINGLE_TOP它推出另一项活动,在这里我要放置退出按钮。为了把所有事情都背景化,我必须完成当前和主要活动。尽管如此,启动主要活动时应使用这些标志以及它应该退出的额外信息,但这样做会带来额外的影响,但是意图提供的额外内容不会达到主要活动 - 它仍然会获得android用来启动应用程序的意图。的Android出境申请

换句话说,我想是这样的:

// Exit's onClick: 
Intent intent = new Intent(someContext, MainActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
intent.putExtra("exit", true); 
context.startActivity(intent); 
currentActivity.finish(); 

// MainActivity onCreate: 
Bundle extras = getIntent().getExtras(); 
if (extras != null) 
{ 
    // application never reach this point 
    boolean exit = extras.getBoolean("exit"); 
    if (exit) 
    { 
    finish(); 
    return; 
    } 
} 

的额外交付。我怎样才能使它工作?

致谢MainActivityAndroidManifest.xml文件

回答

0

设置启动模式为"SingleTop"如下:

android:launchMode="singleTop" 
+0

这并不能解决问题,更重要的是它还会导致更多的活动堆栈问题。 –

1
System.Exit(0); 

//你可以用它来退出整个应用程序,而不仅仅是一个活动

0

我不知道这是否是最好的解决办法,但工作对我说:

在事件监听器:

int pid = android.os.Process.myPid(); 
android.os.Process.killProcess(pid); 
0

简单,做一个类,把一个静态变量和函数是这样的:

public static boolean isExit = false; 

public static boolean CheckExit() { 
return isExit; 
} 

public static void setisExit(boolean b) 
{ 
isExit = b; 
} 

而在你的主要活动YourClassName.setisExit(false);将确保isExit值在应用程序重新启动时为false。

退出:

OnClick方法将这个:

YourClassName.setisExit(true); 
finish(); 

,换上这OnResume方法的每一次活动的第一行:

if(YourClassName.CheckExit()) { 
    finish(); 
    return super.onResume(); 
    } 

通过每次都做一个活动的简历是检查isExit值,如果为true,则退出。

您可以在google play上查看我的应用E Player。我实施了这种方法并且工作正常

+0

当Android决定在恢复应用程序时从头开始重新创建GUI时,静态变量会丢失。您的解决方案不可靠。 –

+0

好的,但是一旦用户点击退出按钮,现在用户已经不在应用程序中,所以如果应用程序重新创建,它是否重要。没有一次我或我的E播放器用户觉得退出功能出错。而持有这些静态变量的类是一个单独的类而不是活动 –