如何退出应用程序并显示主屏幕?

poo*_*118 193 android back-button exit

我有一个应用程序,在主页上我有通过应用程序导航的按钮.

在那个页面上,我有一个"EXIT"按钮,当点击它时,应该将用户带到应用程序图标所在的手机上的主屏幕.

我怎样才能做到这一点?

ogn*_*ian 323

Android的设计不赞成通过选择退出应用程序,而是通过操作系统管理它.您可以通过相应的Intent调出Home应用程序:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

  • 你甚至可以使用.."moveTaskToBack(true);" (25认同)
  • 它会处理所有资源吗?因为当我以这种方式退出应用程序时,一段时间后我再次单击应用程序图标.它从我离开的地方开始.这意味着该应用程序仍在后台运行. (16认同)
  • Activity.finish(); (12认同)
  • 这使您的应用程序保持在后台,因此它不会退出应用程序. (11认同)
  • 这个答案只会使主屏幕出现,并且不会像OP那样完全退出/关闭应用程序. (3认同)

Kar*_*iya 74

也许你可以尝试这样的事情

假设在我们的应用程序中,我们有许多活动(比如十个),我们需要直接退出此活动.我们可以做的是,创建一个intent并转到root活动并在intent中设置标志

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Run Code Online (Sandbox Code Playgroud)

另外,在意图中添加一些额外的布尔值

intent.putExtra("EXIT", true);
Run Code Online (Sandbox Code Playgroud)

然后在根活动,检查的值boolean,并根据该呼叫结束(),在onCreate()根活动

if (getIntent().getBooleanExtra("EXIT", false)) {
 finish();
}
Run Code Online (Sandbox Code Playgroud)

  • 在我的情况下,我不得不重写`onNewIntent`.因为intnet.getExtras()保持为null. (2认同)

Ndu*_*pza 28

System.exit(0);
Run Code Online (Sandbox Code Playgroud)

可能就是你要找的东西.它将关闭整个应用程序并带您进入主屏幕.

  • 不应按核心Android团队的建议使用System.exit(0). (7认同)
  • 我认为这是特殊情况下的最佳方法.比如说需要互联网的应用程序,连接会将一些活动分解到应用程序中.可以显示警告对话框(无按钮).返回按钮需要退出整个应用程序,因为重新进入需要再次登录/初始化.System.exit是我发现的唯一合理工作的东西.虽然不确定@ user1699548评论. (2认同)

Laz*_*nja 25

这对我很有用.
关闭所有以前的活动,如下所示:

    Intent intent = new Intent(this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("Exit me", true);
    startActivity(intent);
    finish();
Run Code Online (Sandbox Code Playgroud)

然后在MainActivity onCreate()方法中添加此项以完成MainActivity

    setContentView(R.layout.main_layout);

    if( getIntent().getBooleanExtra("Exit me", false)){
        finish();
        return; // add this to prevent from doing unnecessary stuffs
    }
Run Code Online (Sandbox Code Playgroud)


小智 23

首先使用方法完成您的申请 finish();

然后在onDestroy中添加以下行以删除Force关闭

android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
Run Code Online (Sandbox Code Playgroud)

  • @Jacky:杀死进程如何不释放任何系统资源? (5认同)
  • 永远不要使用它,因为它没有机会释放资源 (3认同)

Chr*_*ian 19

如果您想结束活动,可以直接致电finish().然而,在屏幕上有一个退出按钮是不好的做法.

  • 我正在使用它"你需要将此应用程序更新到最新版本",我不希望它们继续使用它.还是不好的做法......? (2认同)

Bur*_*man 17

有些活动实际上你不想在按下后退按钮时再次打开这样的Splash Screen Activity,欢迎屏幕活动,确认Windows.实际上你在活动堆栈中不需要这个.你可以使用=> open manifest.xml文件并添加一个属性

机器人:noHistory = "真"

这些活动.

<activity
    android:name="com.example.shoppingapp.AddNewItems"
    android:label="" 
    android:noHistory="true">
</activity>
Run Code Online (Sandbox Code Playgroud)

要么

有时您希望在某些后退按钮中关闭整个应用程序.这里的最佳实践是打开主窗口而不是退出应用程序.为此,您需要覆盖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);

}
Run Code Online (Sandbox Code Playgroud)

要么

在后退按钮中,您想要退出该活动,并且您也不想在活动堆栈中添加它.在onBackPressed()方法中调用finish()方法.它不会关闭整个应用程序.它将用于堆栈中的先前活动.

@Override
public void onBackPressed() {
  finish();
}
Run Code Online (Sandbox Code Playgroud)


Jan*_*usz 16

建议不要退出Android应用程序.有关详细信息,请参阅此问题.

用户可以随时通过主页按钮退出应用程序,也可以通过后退按钮退出第一个活动.

  • @janusz:按下主页按钮永远不会退出Android应用程序,而是在后台进行... (3认同)

tra*_*nte 5

(我尝试过以前的答案,但他们缺少一些观点.例如,如果你return;在完成活动后没有完成,剩下的活动代码就会运行.你还需要编辑onCreate with return.如果你没有运行super.onCreate()你会得到一个运行时错误)

说你有MainActivityChildActivity.

在ChildActivity里面添加:

Intent intent = new Intent(ChildActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
return true;
Run Code Online (Sandbox Code Playgroud)

在MainActivity的onCreate里面添加:

@Override
public void onCreate(Bundle savedInstanceState) {

    mContext = getApplicationContext();

    super.onCreate(savedInstanceState);

    if (getIntent().getBooleanExtra("EXIT", false)) {
        finish();
        return;
    }
    // your current codes
    // your current codes
}
Run Code Online (Sandbox Code Playgroud)