当用户在意图上按下后退按钮时,应用程序应该退出。当按下后退按钮时,如何确保应用程序退出?
12 回答
在我的家庭活动中,我将“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获取代码
在您开始一项新活动后,立即使用startActivity
,确保您调用finish()
,以便当前活动不会堆叠在新活动后面。
编辑 关于您的评论:
您的建议并不是特别是 android 应用程序流程通常如何工作,以及用户期望它如何工作。如果您真的愿意,您可以做的是确保每个startActivity
导致该活动的活动都是一个startActivityForResult
并且有一个onActivityResult
侦听器来检查退出代码,并将其返回。您可以在此处阅读更多相关信息。基本上,setResult
在完成一项活动之前使用,设置您选择的退出代码,如果您的父活动收到该退出代码,您将其设置在该活动中,并完成该活动,等等...
更好的用户体验:
/**
* 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"到你不想被重新堆叠的所有活动中。然后关闭应用程序调用OnBackPressed 中的finish()
<activity android:name=".activities.DemoActivity"
android:screenOrientation="portrait"
**android:noHistory="true"**
/>
为什么用户不直接点击主页按钮?然后他们可以从您的任何活动中退出您的应用程序,而不仅仅是特定活动。
如果您担心您的应用程序继续在后台执行某些操作。确保在相关的 onPause 和 onStop 命令中停止它(当用户按下 Home 时会触发)。
如果您的问题是您希望用户下次点击您的应用程序时重新开始,我建议在屏幕上放置某种菜单项或 UI 按钮,让用户回到您的启动活动应用程序。像官方推特应用程序中的推特鸟等。
使用onBackPressed
方法
@Override
public void onBackPressed() {
finish();
super.onBackPressed();
}
这将解决您的问题。
首先,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);
}
要退出 Android 应用程序,只需使用。在您的主活动中,或者您可以使用 Android 清单文件来设置
android:noHistory="true"
使用方法完成你的 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();
}
我修改了@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);
}