【发布时间】:2011-01-22 04:45:21
【问题描述】:
当用户按下意图上的后退按钮时,应用程序应该退出。如何确保按下后退按钮时应用程序退出?
【问题讨论】:
标签: android exit back-button
当用户按下意图上的后退按钮时,应用程序应该退出。如何确保按下后退按钮时应用程序退出?
【问题讨论】:
标签: android exit back-button
在我的家庭活动中,我将“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);
}
因此,如果用户在主页活动中并按返回,他会转到主屏幕。
【讨论】:
在您开始一项新活动后,立即使用startActivity,确保您调用finish(),以便当前活动不会堆叠在新活动后面。
编辑 关于您的评论:
您所建议的并不是特别是 android 应用程序流程通常如何工作,以及用户期望它如何工作。如果您真的愿意,您可以 做的是确保导致该活动的每个startActivity 都是startActivityForResult 并且有一个onActivityResult 侦听器来检查退出代码,然后起泡。你可以read more about that here。基本上,在完成一项活动之前使用setResult 设置您选择的退出代码,如果您的父活动收到该退出代码,您将其设置在 that 活动中,然后完成那个,等等...
【讨论】:
更好的用户体验:
/**
* 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++;
}
}
【讨论】:
只有在后台堆栈中没有活动时,应用才会退出。所以在你的清单中添加这一行 android:noHistory="true" 到所有你不想重新堆叠的活动中。然后关闭应用程序调用 finish() strong> 在 OnBackPressed 中
<activity android:name=".activities.DemoActivity"
android:screenOrientation="portrait"
**android:noHistory="true"**
/>
【讨论】:
为什么用户不直接点击主页按钮?然后他们可以从您的任何活动中退出您的应用,而不仅仅是特定活动。
如果您担心您的应用程序继续在后台执行某些操作。确保在相关的 onPause 和 onStop 命令中停止它(当用户按下 Home 时会触发)。
如果您的问题是您希望用户下次点击您的应用时重新开始,我建议您在屏幕上放置某种菜单项或 UI 按钮,让用户回到起点您的应用程序的活动。比如官方推特应用中的推特鸟等。
【讨论】:
使用onBackPressed方法
@Override
public void onBackPressed() {
finish();
super.onBackPressed();
}
这将解决您的问题。
【讨论】:
super.onBackPressed();
首先,Android 不建议您在后退按钮中执行此操作,而是使用提供的生命周期方法。后退按钮不应破坏 Activity。
Activity 被添加到堆栈中,当在 UI 堆栈中最后一个剩余的 Activity 上按下后退按钮时,可以从概览(方形按钮,因为他们在 5.0 中引入了材料设计)访问。如果用户想要关闭您的应用,他们应该从“概览”菜单中将其滑动(关闭)。
您的应用负责在 onPause()、onStop() 和 onDestroy() 生命周期方法上停止任何您不想运行的后台任务和作业。请在此处阅读有关生命周期及其正确实施的更多信息:http://developer.android.com/training/basics/activity-lifecycle/stopping.html
但要回答您的问题,您可以执行 hacks 来实现您想要的确切行为,但正如我所说,不建议这样做:
@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);
}
【讨论】:
要退出 Android 应用,只需使用。 在你的 Main Activity 中,或者你可以使用 Android manifest 文件来设置
android:noHistory="true"
【讨论】:
使用方法finish() onBack method of your current_activity完成你的current_activity
然后在 current_activity 的 onDestroy 中添加以下行以移除强制关闭
@Override
public void onDestroy()
{
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
}
【讨论】:
我修改了@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();
}
}
【讨论】:
你可以简单地使用这个
startActivity(new Intent(this, Splash.class));
moveTaskToBack(true);
startActivity(new Intent(this, Splash.class)); 是应用程序启动时将启动的第一个类
moveTaskToBack(true); 将最小化您的应用程序
【讨论】:
将此代码添加到您想要在按下后退按钮时退出应用程序的活动中:
@Override
public void onBackPressed() {
super.onBackPressed();
exitFromApp();
}
private void exitFromApp() {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}
【讨论】: