48

当用户在意图上按下后退按钮时,应用程序应该退出。当按下后退按钮时,如何确保应用程序退出?

4

12 回答 12

97

在我的家庭活动中,我将“onBackPressed”覆盖为:

@Override
public void onBackPressed() {
   Intent intent = new Intent(Intent.ACTION_MAIN);
   intent.addCategory(Intent.CATEGORY_HOME);
   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   startActivity(intent);
 }

因此,如果用户在主活动中并按返回,他会转到主屏幕。

我以编程方式从Going to home screen获取代码

于 2012-04-11T19:38:24.097 回答
50

在您开始一项新活动后,立即使用startActivity,确保您调用finish(),以便当前活动不会堆叠在新活动后面。

编辑 关于您的评论:

您的建议并不是特别是 android 应用程序流程通常如何工作,以及用户期望它如何工作。如果您真的愿意,您可以做的是确保每个startActivity导致该活动的活动都是一个startActivityForResult并且有一个onActivityResult侦听器来检查退出代码,并将其返回。您可以在此处阅读更多相关信息。基本上,setResult在完成一项活动之前使用,设置您选择的退出代码,如果您的父活动收到该退出代码,您将其设置在活动中,并完成该活动,等等...

于 2010-03-01T07:22:38.347 回答
33

更好的用户体验:

/**
 * Back button listener.
 * Will close the application if the back button pressed twice.
 */
@Override
public void onBackPressed()
{
    if(backButtonCount >= 1)
    {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
    else
    {
        Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show();
        backButtonCount++;
    }
}
于 2013-05-05T10:02:05.897 回答
3

只有在后台堆栈中没有活动时,应用才会退出。所以在你的清单中添加这一行 android:noHistory="true"到你不想被重新堆叠的所有活动中。然后关闭应用程序调用OnBackPressed 中的finish()

<activity android:name=".activities.DemoActivity"
            android:screenOrientation="portrait"
            **android:noHistory="true"**
            />
于 2015-06-09T07:16:12.407 回答
2

为什么用户不直接点击主页按钮?然后他们可以从您的任何活动中退出您的应用程序,而不仅仅是特定活动。

如果您担心您的应用程序继续在后台执行某些操作。确保在相关的 onPause 和 onStop 命令中停止它(当用户按下 Home 时会触发)。

如果您的问题是您希望用户下次点击您的应用程序时重新开始,我建议在屏幕上放置某种菜单项或 UI 按钮,让用户回到您的启动活动应用程序。像官方推特应用程序中的推特鸟等。

于 2010-10-29T17:21:09.147 回答
2

使用onBackPressed方法

@Override
public void onBackPressed() {
    finish();
    super.onBackPressed();
}

这将解决您的问题。

于 2017-03-21T09:27:29.793 回答
1

首先,Android 不建议您在后退按钮中执行此操作,而是使用提供的生命周期方法。后退按钮不应破坏 Activity。

Activity 被添加到堆栈中,当在 UI 堆栈中最后一个剩余的 Activity 上按下后退按钮时,可以从 Overview(方形按钮,因为他们在 5.0 中引入了材料设计)访问。如果用户想要关闭您的应用程序,他们应该从“概览”菜单中将其滑动(关闭)。

您的应用负责在 onPause()、onStop() 和 onDestroy() 生命周期方法上停止任何您不想运行的后台任务和作业。请在此处阅读有关生命周期及其正确实施的更多信息:http: //developer.android.com/training/basics/activity-lifecycle/stopping.html

但要回答你的问题,你可以做黑客来实现你想要的确切行为,但正如我所说,不建议这样做

@Override
 public void onBackPressed() {

// make sure you have this outcommented
// super.onBackPressed();
 Intent intent = new Intent(Intent.ACTION_MAIN);
 intent.addCategory(Intent.CATEGORY_HOME);
 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 startActivity(intent);
}
于 2015-10-01T14:15:41.990 回答
1

要退出 Android 应用程序,只需使用。在您的主活动中,或者您可以使用 Android 清单文件来设置

android:noHistory="true"
于 2017-01-17T03:57:51.043 回答
0

使用方法完成你的 current_activityfinish() onBack method of your current_activity

然后在 current_activity 的 onDestroy 中添加以下行以移除强制关闭

@Override
public void onDestroy()
{
    android.os.Process.killProcess(android.os.Process.myPid());
    super.onDestroy();
}
于 2014-11-25T12:48:08.237 回答
0

我修改了@Vlad_Spays 答案,以便后退按钮正常运行,除非它是堆栈中的最后一项,然后它会在退出应用程序之前提示用户。

@Override
public void onBackPressed(){
    if (isTaskRoot()){
        if (backButtonCount >= 1){
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }else{
            Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show();
            backButtonCount++;
        }
    }else{
        super.onBackPressed();
    }
}
于 2018-03-08T23:57:22.463 回答
0

你可以简单地使用这个

 startActivity(new Intent(this, Splash.class));
 moveTaskToBack(true);

startActivity(new Intent(this, Splash.class));是应用程序启动时将启动的第一个类

moveTaskToBack(true);将最小化您的应用程序

于 2020-03-05T10:13:14.837 回答
0

将此代码添加到您想要在按下后退按钮时退出应用程序的活动中:

@Override
public void onBackPressed() {
    super.onBackPressed();
    exitFromApp();
}

private void exitFromApp() {
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    startActivity(intent);
}
于 2020-05-02T03:21:51.113 回答