我正在构建一个Android应用程序。按下后退时如何退出Android应用程序。 Android版本为2.3.3及以上版本。 Android应用程序转到以前我不想要的活动。
答案 0 :(得分:33)
试试这个
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);
}
答案 1 :(得分:27)
有些活动实际上你不想在按下后退按钮时再次打开这样的Splash Screen Activity,欢迎屏幕活动,确认Windows。实际上你在活动堆栈中不需要这个。你可以用=>做到这一点打开manifest.xml文件并添加属性
机器人:noHistory = “真”
参加这些活动。
<activity
android:name="com.example.shoppingapp.AddNewItems"
android:label=""
android:noHistory="true">
</activity>
OR
有时您希望在某些后退按钮中关闭整个应用程序。这里的最佳实践是打开主窗口而不是退出应用程序。为此,您需要覆盖onBackPressed()方法。通常这种方法会打开堆栈中的顶级活动。
@override
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);
}
OR
按下后退按钮您想要退出该活动,并且您也不想在活动堆栈中添加它。在onBackPressed()方法中调用finish()方法。它不会关闭整个应用程序。它将用于堆栈中的先前活动。
onBackPressed - 当活动检测到用户按下后退键时< - >
public void onBackPressed() {
finish();
}
答案 2 :(得分:19)
我知道为时已晚,但没有人提到我使用的代码,所以它会帮助别人。
此moveTaskToBack
与Home Button相同。它保留了Back堆栈。
public void onBackPressed() {
// super.onBackPressed();
moveTaskToBack();
}
答案 3 :(得分:14)
您可以清除所有后台堆栈。
@Override
public void onBackPressed() {
finishAffinity();
}
答案 4 :(得分:7)
如果历史记录中有多个屏幕,则需要忽略所有其他屏幕。 我建议使用这个:
@Override
public void onBackPressed() {
finish();
}
答案 5 :(得分:6)
我找到了一个有趣的解决方案,可能会有所帮助。
我在onBackPressed()中实现了这一点
finishAffinity();
finish();
FinishAffinity删除现有活动与其堆栈的连接。然后完成操作可以帮助您退出该活动。最终将退出应用程序。
答案 6 :(得分:5)
// Finish current activity
// Go back to previous activity or closes app if last activity
finish()
// Finish all activities in stack and app closes
finishAffinity()
// Takes you to home screen but app isnt closed
// Opening app takes you back to this current activity (if it hasnt been destroyed)
Intent(Intent.ACTION_MAIN).apply {
addCategory(Intent.CATEGORY_HOME)
flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(this)
}
答案 7 :(得分:4)
通常情况下,您不应该关闭应用程序 - 用户将按回原点或通过按回来关闭您的活动将其移回。
但你可以使用这个提示:
1)如果不需要在后台堆叠中,则在启动新活动后关闭旧活动:
startActivity(newActivityIntent);
finish();
2)如果您需要http://developer.android.com/reference/android/app/Activity.html#moveTaskToBack(boolean)
,可以将任务移回(而不是关闭) 3)如果您真的需要它,可以使用System.exit(0)
,但强烈不推荐,并且通常会说您有应用程序的体系结构问题。
答案 8 :(得分:1)
弹出
@Override
public void onBackPressed() {
new AlertDialog.Builder(this)
.setTitle("Really Exit?")
.setMessage("Are you sure you want to exit?")
.setNegativeButton(android.R.string.no, null)
.setPositiveButton(android.R.string.yes, new OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
WelcomeActivity.super.onBackPressed();
}
}).create().show();
}
将Class设置为应用程序的顶部而没有历史记录
Intent launchNextActivity;
launchNextActivity = new Intent(B.class, A.class);
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(launchNextActivity);
在此输入代码双击
private static long back_pressed;
@Override
public void onBackPressed(){
if (back_pressed + 2000 > System.currentTimeMillis()){
super.onBackPressed();
}
else{
Toast.makeText(getBaseContext(), "Press once again to exit",
Toast.LENGTH_SHORT).show();
back_pressed = System.currentTimeMillis();
}
}
答案 9 :(得分:0)
只需在您的意图下使用代码finish();
即可关闭活动。所以,它不会再出现。这解决了我的问题
startActivity(new Intent(SplashActivity.this, MainActivity.class));
finish();
答案 10 :(得分:0)
科特琳:
override fun onBackPressed() {
val exitIntent = Intent(Intent.ACTION_MAIN)
exitIntent.addCategory(Intent.CATEGORY_HOME)
exitIntent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
startActivity(exitIntent)
}
其他代码有问题,有些不起作用,有些需要API分类。
答案 11 :(得分:-1)
moveTaskToBack();现在已弃用... 而是使用: moveTaskToBack(true);
答案 12 :(得分:-1)
您可以使用此代码退出应用程序。
@override public void onBackPressed()
{
finishAffinity();
System.exit(0);
}