退出安卓应用
Posted
技术标签:
【中文标题】退出安卓应用【英文标题】:Exit an android app 【发布时间】:2011-07-05 14:40:06 【问题描述】:如果有多个活动处于活动状态,如何关闭安卓应用?
【问题讨论】:
处于活动状态是什么意思? 终于可以退出应用了。将很快更新我遵循的方法 我使用了以下三个步骤: 1) 使用 startActivityForResult(....) 而不是 startActivity 2) 按下退出按钮时写入以下 setResult(RESULT_CLOSE_ALL);结束(); 3) @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) switch(resultCode) case RESULT_CLOSE_ALL: setResult(RESULT_CLOSE_ALL);结束(); super.onActivityResult(requestCode, resultCode, data); 【参考方案1】:标题为Exiting android Application 的博文将展示如何退出 Android 应用:
当用户希望退出所有打开的活动时,他们应该按下一个按钮,该按钮会加载在您的应用启动时运行的第一个活动,在我的例子中是“LoginActivity”。
Intent intent = new Intent(getApplicationContext(), LoginActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("EXIT", true); startActivity(intent);
上面的代码清除了除LoginActivity之外的所有Activity。 LoginActivity 是用户运行程序时启动的第一个活动。然后将此代码放在 LoginActivity 的 onCreate 中,以在传递“退出”消息时发出信号。
if (getIntent().getBooleanExtra("EXIT", false)) finish();
【讨论】:
如果您想要一个简单的解决方案,请查看我的答案【参考方案2】:我有一个解决这个问题的简单方法
使用以下源代码从您按下退出按钮的活动转到第一个活动。请同时阅读 FLAG_ACTIVITY_CLEAR_TOP 的文档。
Intent intent = new Intent(ExitConfirmationActivity.this, FirstActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
现在使用 finish() 覆盖第一个活动的 onResume()
【讨论】:
嗨@dsc。我怎样才能找到第一个活动?我有一个媒体播放器应用程序。它在通知中显示当前曲目。当用户点击通知时,它会显示播放器屏幕。我也有一个主屏幕。我怎样才能找到后栈中的第一个活动? @syloc:第一个活动是指应用程序启动时显示的活动。 您还可以使用 ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 找到第一个活动List taskInfo = activityManager .getRunningTasks(1); ComponentName componentInfo = taskInfo.get(0).baseActivity; 假设我使用主屏幕启动了应用程序。比播放一首歌,这首歌现在在通知中。然后我按下后退按钮,直到我返回到 android 主屏幕。然后我单击通知并再次进入应用程序。但这第一个活动变成了播放器屏幕。 @syloc: 编辑了我之前的评论,componentInfo 将始终返回堆栈中的第一个活动。【参考方案3】:答案很简单:您确实不需要“关闭”Android 应用程序。如果不再显示任何活动,系统将在一段时间后终止该进程。用户可以通过按下“返回”按钮来关闭活动。 Reto Meier 在这里很好地解释了它: http://blog.radioactiveyak.com/2010/05/when-to-include-exit-button-in-android.html
【讨论】:
【参考方案4】:您可能还想阅读此主题;至少可以说很有帮助:Quitting an Android application - Is it frowned upon?
【讨论】:
【参考方案5】:好吧,你不应该关闭你的应用程序,因为系统会管理它。有关更多信息,请参阅其他答案中的帖子/主题。
但是,如果您真的,真的想要,您仍然可以像在任何其他 Java 应用程序中一样调用 System.exit (0);
。
编辑
ActivityManager actmgr = (ActivityManager) this.getSystemService (Context.ACTIVITY_SERVICE);
actmgr.restartPackage ("com.android.your.package.name");
我想起了什么。我试图使用此代码重新启动我的应用程序,但它只能杀死我的应用程序。您可以尝试一下,看看它是否适合您。
【讨论】:
这是真的。但是应该注意,这个调用可能很危险,尤其是在多个线程处于活动状态的情况下。这些将被停止。并且可能会发生(墨菲说会发生)线程在开发人员不希望的状态下停止,这可能会导致数据损坏...... @mreichelt,这就是为什么我真的写了,真的 :) @dsc,你确定吗?我相信它应该工作...... @Shade 它对我不起作用...如果您非常确定,那么我会再检查一次。可能是我的应用程序的其他错误:( @Shade 看到了你的答案..但这不是正确的方法。当我使用 startActivityForResult 而不是 startActivity 我能够退出应用程序 @Shade 我能够使用该方法重新启动我的应用程序【参考方案6】:几周前我问过类似的question。请仔细阅读答案和 cmets,以获得更多观点和可能的解决方案。
IMO 退出应用程序取决于您的应用程序的功能和用户的期望。虽然我理解没有退出按钮的理由,但我也相信这是应用程序设计人员必须根据情况做出的选择。
【讨论】:
【参考方案7】:一旦你的最后一个 Activity 失去焦点,Android 将根据当前系统需要/释放资源卸载你的进程。 您不应该真正关心这一点 - 只需使用生命周期 onStart、OnStop 等...来管理您的状态。
【讨论】:
【参考方案8】:如果您想退出一个 Android 活动,这将使您回到上一个活动或从当前活动的特定位置返回另一个活动。
finish();
System.exit(0);
【讨论】:
以上是关于退出安卓应用的主要内容,如果未能解决你的问题,请参考以下文章