当用户按下intent上的后退按钮时,应用程序应该退出。如何在按下后退按钮时确保应用程序退出?
答案 0 :(得分:86)
在我的家庭活动中,我覆盖" 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);
}
因此,如果用户在家庭活动中并按回,则他会进入主屏幕。
获取了代码答案 1 :(得分:42)
使用startActivity
开始新活动后,请务必致电finish()
,以便当前活动不会堆叠在新活动后面。
修改强> 关于你的评论:
你所建议的并不是特别是Android应用程序流程通常如何工作,以及用户期望它如何工作。如果您真的想要可以做什么,那就是确保导致该活动的每个startActivity
都是startActivityForResult
并且有一个onActivityResult
听众检查退出代码和返回的气泡。你可以read more about that here。基本上,在完成活动之前使用setResult
,设置您选择的退出代码,如果您的父活动收到退出代码,则在那个活动中设置它,然后完成那个等等......
答案 2 :(得分:26)
更好的用户体验:
/**
* 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++;
}
}
答案 3 :(得分:2)
为什么用户不会点击主页按钮?然后,他们可以从您的任何活动中退出您的应用,而不仅仅是特定的活动。
如果您担心您的应用程序继续在后台执行某些操作。确保在相关的onPause和onStop命令中停止它(当用户按下Home时会触发它)。
如果您的问题是您希望下次用户点击您的应用以便在开始时重新开始,我建议您在屏幕上放置一些菜单项或UI按钮,让用户重新开始你的应用的活动。就像官方Twitter应用程序中的推特鸟一样
答案 4 :(得分:2)
只有在后台堆栈中没有活动时,应用才会退出。所以在你的清单 android:noHistory =“true”中添加这一行,你想要回堆叠的所有活动。然后关闭应用程序调用 finish()在OnBackPressed中
<activity android:name=".activities.DemoActivity"
android:screenOrientation="portrait"
**android:noHistory="true"**
/>
答案 5 :(得分:2)
使用onBackPressed
方法
@Override
public void onBackPressed() {
finish();
super.onBackPressed();
}
这将解决您的问题。
答案 6 :(得分:1)
首先,Android不建议您在后退按钮中执行此操作,而是使用提供的生命周期方法。后退按钮不应该破坏活动。
当从UI堆栈中的最后一个剩余活动按下后退按钮时,活动正在添加到堆栈中,可从概述(方形按钮,因为他们在5.0中引入了Material设计)访问。如果用户想要关闭您的应用,他们应该从概述菜单中将其关闭(关闭它)。
您的应用负责停止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);
}
答案 7 :(得分:1)
要退出Android应用,只需使用即可。 在您的主要活动中,或者您可以使用Android清单文件来设置
android:noHistory="true"
答案 8 :(得分:0)
使用方法finish() onBack method of your current_activity
然后在current_activity的onDestroy中添加以下行以删除强制关闭
@Override
public void onDestroy()
{
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
}
答案 9 :(得分: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();
}
}
答案 10 :(得分:0)
您可以简单地使用
startActivity(new Intent(this, Splash.class));
moveTaskToBack(true);
startActivity(new Intent(this, Splash.class));
是应用程序启动时将启动的第一个类
moveTaskToBack(true);
将使您的应用程序最小化
答案 11 :(得分: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);
}